成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】Ngnix實(shí)現(xiàn)一個(gè)緩存和縮略處理的反向代理服務(wù)器

big_cat / 3139人閱讀

摘要:我覺(jué)得結(jié)合的反向代理,緩存和圖像過(guò)濾處理三大模塊來(lái)為我托管在上的圖片來(lái)創(chuàng)建一個(gè)縮略圖服務(wù)器會(huì)很優(yōu)雅。后者將作為的反向代理,產(chǎn)生并提供調(diào)整大小后的圖像。它返回有效的響應(yīng),緩存服務(wù)器將緩存該響應(yīng)天,其它任何東西都只緩存秒。

一兩個(gè)月前,我決定從我的站點(diǎn)中移除Varnish ,并用Nginx內(nèi)置的緩存系統(tǒng)替代它。我本來(lái)已經(jīng)在我的python站點(diǎn)上用了nginx來(lái)反向代理,所以擺脫Varnish意味著少了一個(gè)麻煩。我花了好幾天時(shí)間閱讀怎樣配置nginx的緩存,翻遍了我的python站點(diǎn)的不同的配置文件(是的,很諷刺)。在閱讀過(guò)程中我標(biāo)記了一些有趣的nginx的模塊,這中間就有 Image Filter module(圖像過(guò)濾處理模塊)。

我覺(jué)得結(jié)合nginx的反向代理,緩存和圖像過(guò)濾處理三大模塊來(lái)為我托管在S3上的圖片來(lái)創(chuàng)建一個(gè)縮略圖服務(wù)器會(huì)很優(yōu)雅。如果你仔細(xì)的查看下面的(甚至整個(gè)站點(diǎn)的)標(biāo)簽,你就可以看到nginx實(shí)戰(zhàn)了。

在本文中,我將描述我是怎樣配置nginx來(lái)有效安全的為S3上的圖片產(chǎn)生縮略圖。作為額外獎(jiǎng)勵(lì),我也會(huì)描述我是怎樣使用 Secure Links module (安全鏈接模塊)來(lái)防止人們惡意使用該服務(wù)器產(chǎn)生縮略圖。

準(zhǔn)備開(kāi)始

為了讓不同部分能協(xié)同工作,你的nginx需要編譯進(jìn)圖像濾波,代理和安全鏈接三個(gè)模塊。你可以通過(guò)nginx –V 來(lái)檢查你所具有的模塊。如果你使用的Ubuntu(Debian也行),你可以很輕易的安裝其它任意的nginx模塊(apt-get install 命令)。

一旦nginx準(zhǔn)備好了,我們可以開(kāi)始配置nginx了。

配置

首先需要申明的是我們的代理緩存。這個(gè)申明位于nginx.conf文件的http部分并且描述了基于文件的緩存所在,該緩存將會(huì)存儲(chǔ)我們產(chǎn)生的縮略圖。因?yàn)橐淮尉彺嫖疵屑匆馕吨獜腟3服務(wù)器上獲取完整的圖并且改變它的大小,我們希望配置緩存足夠大以使其能包含我們大部分的縮略圖。對(duì)于我的站點(diǎn),我估計(jì)200MB足夠了。

為了確定你的緩存,把下面的代碼添加到nginx配置文件的http部分的某個(gè)地方:

# Nginx will create a cache capable of storing 16MB of keys and 200MB of data.
proxy_cache_path /tmp/nginx-thumbnails levels=1:2 keys_zone=thumbnail_cache:16M inactive=60d max_size=200M;

現(xiàn)在我們需要說(shuō)明兩個(gè)服務(wù)器定義:一個(gè)緩存服務(wù)器和一個(gè)調(diào)整大小服務(wù)器。后者將作為S3的反向代理,產(chǎn)生并提供調(diào)整大小后的圖像。緩存服務(wù)器位于調(diào)整大小服務(wù)器的前面,緩存并提供調(diào)整大小后的圖像。雖然我不認(rèn)為必須要兩個(gè)服務(wù)器,因?yàn)槲业恼军c(diǎn)訪問(wèn)量并不是特別大,但在谷歌了一下后,我看見(jiàn)的一些文章表明,就是應(yīng)該這樣。

緩存服務(wù)器

緩存服務(wù)器會(huì)暴露給公共訪問(wèn)(我的位于m.charlesleifer.com)。因?yàn)樵摲?wù)器的唯一任務(wù)就是緩存從調(diào)整大小服務(wù)器獲得的響應(yīng),所以配置相當(dāng)簡(jiǎn)單。下面是我的配置:

server {
  listen 80;
  server_name m.charlesleifer.com;

  location / {
    proxy_pass http://localhost:10199;
    proxy_cache thumbnail_cache;
    proxy_cache_key "$host$document_uri$is_args$arg_key";
    proxy_cache_lock on;
    proxy_cache_valid 30d;  # Cache valid thumbnails for 30 days.
    proxy_cache_valid any 15s;  # Everything else gets 15s.
    proxy_cache_use_stale error timeout invalid_header updating;
    proxy_http_version 1.1;
    expires 30d;
  }
}

無(wú)論何時(shí)緩存服務(wù)器得到一個(gè)請(qǐng)求,“thumbnail_cache”將首先被檢測(cè)。如果沒(méi)找到匹配項(xiàng),那就將請(qǐng)求轉(zhuǎn)發(fā)至調(diào)整大小服務(wù)器(運(yùn)行在本地localhost)。它返回有效的響應(yīng),緩存服務(wù)器將緩存該響應(yīng)30天,其它任何東西都只緩存15秒。

調(diào)整大小的服務(wù)器

所有有趣的事情都在調(diào)整大小服務(wù)器。它的任務(wù)是從S3上獲得圖片并基于URL上的參數(shù)實(shí)時(shí)調(diào)整圖片大小。另外,該服務(wù)器會(huì)檢查每個(gè)請(qǐng)求的安全秘鑰以防止其他人隨意產(chǎn)生縮略圖。

因?yàn)樵摲?wù)器配置有幾個(gè)不同的部分,所以讓我們從我們已經(jīng)見(jiàn)過(guò)的部分開(kāi)始:代理

server {
  listen 10199;
  server_name localhost;

  set $backend "your.s3.bucket_name.s3.amazonaws.com";

  resolver 8.8.8.8;  # Use Google for DNS.
  resolver_timeout 5s;

  proxy_buffering off;
  proxy_http_version 1.1;
  proxy_pass_request_body off;  # Not needed by AWS.
  proxy_pass_request_headers off;

  # Clean up the headers going to and from S3.
  proxy_hide_header "x-amz-id-2";
  proxy_hide_header "x-amz-request-id";
  proxy_hide_header "x-amz-storage-class";
  proxy_hide_header "Set-Cookie";
  proxy_ignore_headers "Set-Cookie";
  proxy_set_header Host $backend;
  proxy_method GET;
}

這里除了告訴我們?cè)摲?wù)器如何與S3通訊外并沒(méi)有多余的其他內(nèi)容,所以我們繼續(xù)看下一部分。接下來(lái)要配置的是nginx的圖像濾波模塊。只需要幾個(gè)指令,其中一些我們會(huì)定義到服務(wù)器級(jí)別。

下面是代理設(shè)置,添加如下的圖像濾波模塊:

server {
  # ...

  image_filter_jpeg_quality 85;  # Adjust to your preferences.
  image_filter_buffer 12M;
  image_filter_interlace on;
}

最后,我們定義一個(gè)代碼塊,完成如下功能:

檢查形式合法的URL

校驗(yàn)請(qǐng)求的簽名

從URL中提取圖片大小參數(shù)

從S3獲得圖像并把它載入 image_filter_buffer

調(diào)整圖片大小并響應(yīng)

第二項(xiàng)相當(dāng)有趣。一篇類似的文章的作者使用Lua來(lái)校驗(yàn)請(qǐng)求的簽名,但那樣好像步驟比較繁瑣。 Nginx的 secure_link 擴(kuò)展相當(dāng)容易使用。

secure_link模塊原理是:用被請(qǐng)求的圖片的URL和只有你的app知道的密鑰串連接起來(lái)的串來(lái)產(chǎn)生一個(gè)哈希(hash)。由于hash長(zhǎng)度擴(kuò)展,我們最后附加我們的密鑰而不是預(yù)先考慮它。因?yàn)槟阒烂罔€,所以無(wú)論何時(shí)你想在你的應(yīng)用中展示圖片縮略圖時(shí)你都可以產(chǎn)生有效的hash。

下面是配置的最后一部分:

server {
  # ...
  error_page 404 =404 /empty.gif;

  location ~ ^/t/([d-]+)x([d-]+)/(.*) {
    secure_link $arg_key;  # The hash is stored in the `key` querystring arg.
    secure_link_md5 "$uri my-secret-key";
    if ($secure_link = "") {
      # The security check failed, invalid key!
      return 404;
    }
    set $image_path "$3";
    image_filter resize $1 $2;

    proxy_pass http://$backend/$3;
  }
}

這就是所有的。

產(chǎn)生hash

如果你使用python,下面是我寫(xiě)的代碼用以在特定URI下產(chǎn)生hash:

import base64
import hashlib

def thumbnail_url(filename, width, height="-"):
    uri = "/t/%sx%s/%s" % (width, height, filename)
    md5_digest = hashlib.md5(uri + " my-secret-key").digest()
    key = base64.b64encode(md5_digest)
    # Make the key look like Nginx expects.
    key = key.replace("+", "-").replace("/", "_").rstrip("=")

    return "http://m.charlesleifer.com%s?key=%s" % (uri, key)
感謝閱讀

感謝你花時(shí)間閱讀這篇文章,我希望你找到了樂(lè)趣。請(qǐng)留下評(píng)論,我會(huì)盡力回答。如果你發(fā)現(xiàn)了我上面的說(shuō)明有什么錯(cuò)誤也請(qǐng)讓我知道,我會(huì)更新本文。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/39239.html

相關(guān)文章

  • Ngnix實(shí)現(xiàn)一個(gè)緩存縮略處理反向代理務(wù)器

    摘要:我覺(jué)得結(jié)合的反向代理,緩存和圖像過(guò)濾處理三大模塊來(lái)為我托管在上的圖片來(lái)創(chuàng)建一個(gè)縮略圖服務(wù)器會(huì)很優(yōu)雅。后者將作為的反向代理,產(chǎn)生并提供調(diào)整大小后的圖像。它返回有效的響應(yīng),緩存服務(wù)器將緩存該響應(yīng)天,其它任何東西都只緩存秒。 一兩個(gè)月前,我決定從我的站點(diǎn)中移除Varnish ,并用Nginx內(nèi)置的緩存系統(tǒng)替代它。我本來(lái)已經(jīng)在我的python站點(diǎn)上用了nginx來(lái)反向代理,所以擺脫Varnis...

    bergwhite 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    GitCafe 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    explorer_ddf 評(píng)論0 收藏0
  • 后端技術(shù)精選

    摘要:服務(wù)教程在它提出十多年后的今天,已經(jīng)成為最重要的應(yīng)用技術(shù)之一。全方位提升網(wǎng)站打開(kāi)速度前端后端新的技術(shù)如何在內(nèi)完整打開(kāi)網(wǎng)站會(huì)直接影響用戶的滿意度及留存率,在前端后端數(shù)據(jù)緩存加速等等方面都有諸多可以提升。 HTTPS 原理剖析與項(xiàng)目場(chǎng)景 最近手頭有兩個(gè)項(xiàng)目,XX 導(dǎo)航和 XX 產(chǎn)業(yè)平臺(tái),都需要使用 HTTPS 協(xié)議,因此,這次對(duì) HTTPS 協(xié)議做一次整理與分享。 使用緩存應(yīng)該注意哪些問(wèn)題...

    Jensen 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<