国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

搞懂nginx的proxy模塊-01

ssshooter / 1423人閱讀

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

搞懂nginx的proxy模塊-01

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

代理時用到的指令集

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

proxy_pass 轉發代理請求

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

一些 http 參數的改寫

proxy_http_version
proxy_http_version 1.0 | 1.1; 設置代理的HTTP協議版本。默認情況下,使用版本1.0。

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

請求頭/響應頭 處理

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

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

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

2.proxy_pass_request_headers
指定是否將原始的請求頭轉發給后端服務。如果要忽略掉所有的原始請求頭,則可以關閉此值。默認值為on。即不忽略。

3.proxy_ignore_headers
告知nginx后端服務的響應中的哪些響應頭不要去被處理,如下幾個響應頭可以被忽略:X-Accel-RedirectX-Accel-ExpiresX-Accel-Limit-Rate、X-Accel-Buffering、X-Accel-CharsetExpiresCache-Control、Set-Cookie、Vary。

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

如果后端服務設置了這些響應頭,但是你沒有忽略它們,則它們可能對nginx有著如下影響
X-Accel-Expires、Expires、Cache-ControlSet-CookieVary 將會影響nginx的緩存機制。
X-Accel-Redirect 執行一個內部跳轉到指定的uri
X-Accel-Limit-Rate 將會影響響應到客戶端的傳輸速度
X-Accel-Buffering 啟用或者警用響應的緩沖區
X-Accel-Charset 影響 響應的字符集

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

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

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

    # 如下配置只是學習之用
    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頭給客戶端 要不客戶端顯示的是代理服務器的server 
            # Server → openresty/1.9.7.3
            proxy_pass_header Server; 
            proxy_pass http://backend;
        }
    }
請求體 / 響應體 處理

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

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

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

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

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

1.proxy_buffering
控制本內容塊下(包括子內容塊)是否對后端服務的響應啟用緩沖,默認為on。

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

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

4.proxy_busy_buffers_size
設置被標記為“client-ready”(客戶端就緒)的緩沖區大小。客戶端一次只能從一個緩沖讀取數據,而緩沖是按照隊列次序被分批發送給客戶端的。本條目設置的值就是這個隊列的大小。

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

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

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

上面是被代理的服務響應的body處理方式


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

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

9.proxy_pass_request_body
指定是否將原始的請求體轉發給后端服務。如果要忽略掉所有的原始請求體,則可以關閉此值。默認值為on。即不忽略。

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

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

下面這個示范增加了每個上游請求可用的緩沖,同時縮減了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;
}

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

# server context

proxy_buffering off;
proxy_buffer_size 4k;

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39450.html

相關文章

  • 搞懂nginxrewrite模塊

    摘要:非標準碼關閉連接而不發送響應報頭。指令按照它們在配置文件中出現的順序執行。可以使用標志來終止指令的進一步處理。返回永久重定向。發送如下請求控制是否記錄有關未初始化變量的警告。 之前在配置nginx時,總是遇到rewrite指令的last和break標識的問題,看到的資料大都是last 基本上都用這個 Flag,break 中止 Rewirte,不在繼續匹配??赐曛筮€是有點懵,后來看了...

    wangshijun 評論0 收藏0
  • Nginx 學習總結(4)—— Rewrite 模塊

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

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

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

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

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

    simpleapples 評論0 收藏0

發表評論

0條評論

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