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

資訊專欄INFORMATION COLUMN

搞懂nginx的proxy模塊-01

ssshooter / 1432人閱讀

摘要:參數(shù)值可以包含變量請求頭響應(yīng)頭處理默認(rèn)情況下,重新定義代理請求和中的兩個頭字段,并刪除了值為空字符串的頭字段。修改或設(shè)置請求頭的值請求頭的值可以是變量,文本或者是它們的組合如果為空字符串那么這個字段將不會被轉(zhuǎn)發(fā)到代理服務(wù)器。

搞懂nginx的proxy模塊-01

nginx的ngx_http_proxy_module模塊的指令著實是太多了,其實平時工作中經(jīng)常用到的指令也就是那幾個,但是如果不細看下文檔的話,下次對一些配置的使用還是會比較棘手的。所以還是花點時間,對文檔全盤掃描下吧。
此處因為指令太多,我就按照其用途大概歸類整理了下。也方便自己日后查看。。。

代理時用到的指令集

代理請求就是將請求先發(fā)送到指定的代理服務(wù)器,獲取響應(yīng),然后將其發(fā)送回客戶端。當(dāng)然請求可能被代理到http服務(wù)器(proxy_pass)也可能不是http服務(wù)器。(nginx 支持的協(xié)議包括 FastCGI, uwsgi, SCGI, 和 memcached.它們對應(yīng)的指令分別是fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass; 這幾個指令都不屬于今天要說的proxy模塊。在此就不作說明了。而且我也沒用過。。。)

proxy_pass 轉(zhuǎn)發(fā)代理請求

首先要發(fā)送代理請求給后端代理服務(wù),這就得用到 proxy_pass 指令了,因為這個指令我在之前的一篇文章中已經(jīng)對其使用中的注意點作出說明,所以這里就不再闡述了。詳情請看這里

一些 http 參數(shù)的改寫

proxy_http_version
proxy_http_version 1.0 | 1.1; 設(shè)置代理的HTTP協(xié)議版本。默認(rèn)情況下,使用版本1.0。

proxy_method
指定在轉(zhuǎn)發(fā)到代理服務(wù)器的請求中使用的HTTP方法,而不是來自客戶端請求的方法。參數(shù)值可以包含變量

請求頭/響應(yīng)頭 處理

默認(rèn)情況下,nginx 重新定義代理請求HostConnection中的兩個頭字段,并刪除了值為空字符串的頭字段。其中請求頭Host被設(shè)置為了變量$proxy_hostConnection被設(shè)定為close。

所以為了改變這些設(shè)置,我們可以使用如下指令。

1.proxy_set_header
proxy_set_header field value; 修改或設(shè)置請求頭的值
請求頭的值value可以是變量,文本或者是它們的組合,如果value為空字符串那么這個字段將不會被轉(zhuǎn)發(fā)到代理服務(wù)器。
如果nginx緩存被啟用了的話,從原始請求發(fā)過來的如下請求頭 If-Modified-Since, If-Unmodified-Since, If-None-Match, If-Match, Range, If-Range, 是不會被轉(zhuǎn)發(fā)到代理服務(wù)器的

2.proxy_pass_request_headers
指定是否將原始的請求頭轉(zhuǎn)發(fā)給后端服務(wù)。如果要忽略掉所有的原始請求頭,則可以關(guān)閉此值。默認(rèn)值為on。即不忽略。

3.proxy_ignore_headers
告知nginx后端服務(wù)的響應(yīng)中的哪些響應(yīng)頭不要去被處理,如下幾個響應(yīng)頭可以被忽略:X-Accel-Redirect、X-Accel-Expires、X-Accel-Limit-Rate、X-Accel-Buffering、X-Accel-Charset、Expires、Cache-ControlSet-Cookie、Vary。

你如果指定這些之外的響應(yīng)頭的是不被允許的。因為只有這些響應(yīng)頭nginx才回去解析并應(yīng)用它們。

如果后端服務(wù)設(shè)置了這些響應(yīng)頭,但是你沒有忽略它們,則它們可能對nginx有著如下影響
X-Accel-ExpiresExpires、Cache-Control、Set-CookieVary 將會影響nginx的緩存機制。
X-Accel-Redirect 執(zhí)行一個內(nèi)部跳轉(zhuǎn)到指定的uri
X-Accel-Limit-Rate 將會影響響應(yīng)到客戶端的傳輸速度
X-Accel-Buffering 啟用或者警用響應(yīng)的緩沖區(qū)
X-Accel-Charset 影響 響應(yīng)的字符集

4.proxy_hide_header
此指令在 nginx 將請求的響應(yīng)結(jié)果給客戶端的時候,將后端響應(yīng)的一些請求頭過濾掉
默認(rèn)nginx不會將響應(yīng)中的DateServerX-Pad、X-Accel-...等響應(yīng)頭發(fā)送給客戶端。而proxy_hide_header指令則是繼續(xù)設(shè)置不需要發(fā)送的其他的響應(yīng)頭;當(dāng)然,對于你想把上面被忽略掉的響應(yīng)頭傳遞給客戶端,你可以使用proxy_pass_header指令指定。

5.proxy_pass_header
proxy_hide_header指令默認(rèn)不會把上面列舉的那幾個header傳遞給客戶端,那么proxy_pass_header則允許其中某個響應(yīng)頭傳遞給客戶端。

6.proxy_headers_hash_bucket_size 和 proxy_headers_hash_max_size(這兩個不是太清楚。。。所以就不說了,希望知道的同學(xué)告知一下)

    # 如下配置只是學(xué)習(xí)之用
    upstream backend {
        server 10.5.20.3:3100;
        server 10.5.20.3:3101;
        server 10.5.20.3:3102;
        server 10.5.20.3:3103;
    }
    server {
        listen 8080;
        location / {
            # 忽略掉所有原始請求頭
            proxy_pass_request_headers off;
            # 修改host頭
            proxy_set_header Host $host;
            # 此處顯示server頭給客戶端 要不客戶端顯示的是代理服務(wù)器的server 
            # Server → openresty/1.9.7.3
            proxy_pass_header Server; 
            proxy_pass http://backend;
        }
    }
請求體 / 響應(yīng)體 處理

此處參考 http://blog.csdn.net/zstack_org/article/details/53940047

很多用戶擔(dān)心添加服務(wù)器會對代理性能造成影響。大部分情況下,Nginx的緩沖(buffer)和緩存(cache)機制能夠很好的規(guī)避此類性能問題。

代理過程中,有兩個連接的速度會影響客戶端體驗:
(1).從客戶端到Nginx的連接
(2).從Nginx到后端的連接

Nginx可以優(yōu)化連接,不同的優(yōu)化方案有不同的結(jié)果。
沒有緩沖的情況下,數(shù)據(jù)直接從后端服務(wù)器發(fā)送給客戶端。如果客戶端的連接速度快,則可以關(guān)閉緩沖以提高數(shù)據(jù)發(fā)送速度。緩沖的作用是在Nginx上臨時存儲來自后端服務(wù)器的處理結(jié)果,從而可以提早關(guān)閉Nginx到后端的連接,這比較適合客戶端連接較慢的情況。

Nginx默認(rèn)啟用緩沖,因為客戶端的連接速度一般來說是差別很大的。緩沖的具體配置可以通過如下條目修改,這些條目可以放在http ,serverlocation內(nèi)容塊下。需要注意的是,涉及緩沖大小的條目是針對請求配置的,如果設(shè)置的比較高,則請求數(shù)很多的時候容易造成性能問題:

1.proxy_buffering
控制本內(nèi)容塊下(包括子內(nèi)容塊)是否對后端服務(wù)的響應(yīng)啟用緩沖,默認(rèn)為on。

2.proxy_buffers
有兩個參數(shù),第一個控制緩沖區(qū)請求數(shù)量,第二個控制緩沖區(qū)大小。默認(rèn)值為8個、一頁(一般是4k或8k)。這個值越大,緩沖的內(nèi)容越多。

3.proxy_buffer_size
后端回復(fù)結(jié)果的首段(包含header的部分)是多帶帶緩沖的,本條目定義這部分的緩沖區(qū)大小。這個值默認(rèn)與proxy_buffer的值相同,我們可以把它設(shè)置的小一些,因為header內(nèi)容一般比較少。

4.proxy_busy_buffers_size
設(shè)置被標(biāo)記為“client-ready”(客戶端就緒)的緩沖區(qū)大小??蛻舳艘淮沃荒軓囊粋€緩沖讀取數(shù)據(jù),而緩沖是按照隊列次序被分批發(fā)送給客戶端的。本條目設(shè)置的值就是這個隊列的大小。

5.proxy_max_temp_file_size
每個請求可以存儲臨時文件的最大大小。如果上游發(fā)來的結(jié)果太大以至于無法放入一個緩沖,則Nginx會為其創(chuàng)建臨時文件。

6.proxy_temp_path
定義Nginx存儲臨時文件的路徑。

7.proxy_temp_file_write_size
限制一次性寫入臨時文件的數(shù)據(jù)大小。

上面是被代理的服務(wù)響應(yīng)的body處理方式


下面是客戶端請求的body的處理方式

8.proxy_request_buffering
控制本內(nèi)容塊下(包括子內(nèi)容塊)是否對客戶端的請求體啟用緩沖,默認(rèn)為on。啟用的話,nginx會從客戶端讀取完整個請求體后再將請求發(fā)送到后端服務(wù)器去。

9.proxy_pass_request_body
指定是否將原始的請求體轉(zhuǎn)發(fā)給后端服務(wù)。如果要忽略掉所有的原始請求體,則可以關(guān)閉此值。默認(rèn)值為on。即不忽略。

10.proxy_set_body
重新設(shè)置這個請求體然后在發(fā)送到后端服務(wù)器。proxy_set_body value;這個value值可以是純文本,變量或者是它們的組合形式

如上所述,Nginx提供了不少關(guān)于緩沖的配置項。大部分配置項我們都不必太在意,可能就是proxy_buffersproxy_buffer_size值得調(diào)整一下。

下面這個示范增加了每個上游請求可用的緩沖,同時縮減了header部分緩沖的大?。?/p>

# server context

proxy_buffering on;
proxy_buffer_size 1k;
proxy_buffers 24 4k;
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;

location / {
    proxy_pass http://example.com;
}

如果你的客戶端連接都很快,也可以像下面這樣完全關(guān)閉緩沖。實際上Nginx還是會在上游比客戶端快的時候使用緩沖,只是緩沖的內(nèi)容會直接刷給客戶端而不是放到緩沖池里等待。如果客戶端的速度慢,則這樣會導(dǎo)致上游連接一直保持。緩沖功能禁用時,只有proxy_buffer_size配置項可用:

# server context

proxy_buffering off;
proxy_buffer_size 4k;

location / {
    proxy_pass http://example.com;
}

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

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

相關(guān)文章

  • 搞懂nginxrewrite模塊

    摘要:非標(biāo)準(zhǔn)碼關(guān)閉連接而不發(fā)送響應(yīng)報頭。指令按照它們在配置文件中出現(xiàn)的順序執(zhí)行??梢允褂脴?biāo)志來終止指令的進一步處理。返回永久重定向。發(fā)送如下請求控制是否記錄有關(guān)未初始化變量的警告。 之前在配置nginx時,總是遇到rewrite指令的last和break標(biāo)識的問題,看到的資料大都是last 基本上都用這個 Flag,break 中止 Rewirte,不在繼續(xù)匹配。看完之后還是有點懵,后來看了...

    wangshijun 評論0 收藏0
  • Nginx 學(xué)習(xí)總結(jié)(4)—— Rewrite 模塊

    摘要:根據(jù)官方文檔說明,模塊是用于使用正則表達式更改請求,有條件地選擇配置,并返回重定向。指令停止執(zhí)行模塊的指令集,但是其他模塊指令不受影響??梢允褂脴?biāo)志來終止指令的進一步處理。 這是 Nginx 學(xué)習(xí)總結(jié)的第四篇,上一篇介紹到了 Nginx 學(xué)習(xí)總結(jié)(3) —— Location 模塊,這一篇會對Rewrite模塊 做一些總結(jié)。根據(jù)官方文檔說明,Rewrite 模塊是用于使用 PCRE 正...

    zhjx922 評論0 收藏0
  • Nginx線程池性能提升9倍(Thread Pools in NGINX Boost Perform

    摘要:當(dāng)一個進行需要處理阻塞操作時,它會將這個任務(wù)交給線程池來完成。線程池配置如果你確信引入線程池對性能提升有效,那么咱們可以繼續(xù)了解一些調(diào)優(yōu)參數(shù)。這個錯誤表示這個線程池消費小于生產(chǎn),所以可以增加隊列長度,如果調(diào)整無效,說明系統(tǒng)達到了瓶頸。 五年級英語水平,端午家庭作業(yè)。 前言 Nginx以異步、事件驅(qū)動的方式處理連接。傳統(tǒng)的方式是每個請求新起一個進程或線程,Nginx沒這樣做,它通過非...

    incredible 評論0 收藏0
  • 【譯】提高nginx9倍性能線程池

    摘要:將訂單傳遞給運送服務(wù)從而解除阻塞隊列在方面,線程池正在執(zhí)行運送服務(wù)的功能。我們將繼續(xù)測試和評估,如果有明顯的好處,我們可能會在未來的版本中將其他操作也提交到線程池。 在nginx的官網(wǎng)看到一篇介紹nginx原理的文章,這篇文章比較老了是15年發(fā)布的,國內(nèi)有人翻譯過但是有些小瑕疵,這里更正出來發(fā)布在我個人的文章里供大家參考,這篇文章詳細的介紹了nginx線程池的原理以及設(shè)計思路,在最后通...

    simpleapples 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<