nginx的反向代理模塊 參數proxy_pass,proxy_method,proxy_hide_

nginx的反向代理模塊有不少種配置,下面介紹一些經常使用的配置實例:

1.proxy_pass


語法: proxy_pass URL
配置塊: location,if
詳解:此配置項將當前請求反向代理到URL參數指定的服務器上,URL能夠是主機名或者IP地址加端口的形式。例如:
  1. // nginx.conf配置文件  
  2. // 配置URL地址  
  3. proxy_pass http://www.54rd.net/html/webserver/;  
  4.   
  5. // 也能夠配置unix句柄  
  6. proxy_pass http://unix:/path/to/backend.sock:/webserver/;  
  7.   
  8. // 也能夠把HTTP轉換成更安全的HTTPS  
  9. proxy_pass https://192.168.0.1;  

默認狀況下反向代理是不會轉發請求中的Host頭部。若是須要轉發,那麼必須加上set_header配置:
  1. proxy_set_header Host $host;  

2.proxy_method


語法:proxy_method method;
配置塊:http,server,location
詳解:此配置項表示轉發時的協議方法名,例如:
  1. // 配置後客戶端發來的GET請求在轉發時方法名也會改成POST  
  2. proxy_method POST;  

3.proxy_hide_header


語法:proxy_hide_header the_header;
配置塊:http,server,location
詳解:nginx會將上游服務器的響應轉發給客戶端,但默認不會轉發如下HTTP頭部字段:Date,Server,X-Pad和X-Accel-*。使用proxy_hide_header後能夠任意指定哪些HTTP頭部字段不能被轉發。例如:
  1. // 例如不轉發緩存控制  
  2. proxy_hide_header Cache-Control;  

4.proxy_pass_header


語法:proxy_pass_header the_header;
配置塊:http,server,location
詳解:於proxy_hide_header功能相反,proxy_pass_header會將原來禁止轉發的header設置成容許轉發。例如:
  1. // 容許重定向  
  2. proxy_pass_header X-Accel-Redirect;  

5.proxy_pass_request_body


語法:proxy_pass_request_body on|off;
默認:proxy_pass_request_body on;
配置塊:http,server,location
詳解:做用爲肯定是否向上遊服務器發送HTTP包體部分。

6.proxy_pass_request_headers


語法:proxy_pass_request_headers on|off;
默認:proxy_pass_request_headers on;
配置塊:http,server,location
詳解:做用爲肯定是否轉發HTTP頭部。

7.proxy_redirect


語法:proxy_redirect [default|off|redirect replacement];
默認:proxy_redirect default;
配置塊:http,server,location
詳解:當上遊服務器返回的響應時重定向或者刷新請求(如HTTP響應碼是302或者301)時,proxy_redirect能夠重設HTTP頭部的location或refresh字段,例如:
  1. // 若是上游服務器發出的響應碼是302,location字段的URL是http://www.54rd.net/html/webserver/,那麼實際會轉發到http://www.54rd.net/html/php/  
  2. proxy_redirect http://www.54rd.net/html/webserver/ http://www.54rd.net/html/php/;  
  3.   
  4. // 還可使用ngx-http-core-module提供的變量來設置  
  5. proxy_redirect http://www.54rd.net/html/webserver/ http://$host:$server_port/;  
  6.   
  7. // 也能夠省略repalcement參數中的主機部分,這時會用虛擬主機名稱來填充  
  8. proxy_redirect http://www.54rd.net/html/webserver/ /html/php/;  

====================== php

在使用nginx的反向代理功能時,有時會出現重定向的url不是我想要的url,例以下面的例子:前端的Nginx負責把http: www 54rd net yum Server 開頭的url反向代理到後端的http: 192 168 1 1 Server 上。對於有完整
在使用nginx的反向代理功能時,有時會出現重定向的url不是我想要的url,例以下面的例子:

前端的Nginx負責把http://www.54rd.net/yum/Server/開頭的url反向代理到後端的http://192.168.1.1/Server/上。

對於有完整的路徑,如http://www.54rd.net/yum/Server/的代理沒有問題,Server對應後臺服務器的一個目錄。

但當訪問 http://www.54rd.net/yum/Server時,後端Nginx會發送一個301到/上,因而返回到前端後URL變成了 http://www.54rd.net/Server/,這個url顯然不是咱們想要的。

在Apache中有個ProxyPassReverse的參數,用來調整反向代理服務器發送的http應答頭的url,能夠解決這個問題。

查了Nginx的手冊後,終於發現了proxy_redirect這個參數,它實現的功能和ProxyPassReverse相似,例如增長以下配置:

  1. location ^~ /yum  
  2. {  
  3.   
  4.             proxy_pass http://192.168.1.1/;  
  5.   
  6.             proxy_redirect http://www.54rd.net/ /yum/;  
  7.   
  8. }  

這樣,當訪問http://www.54rd.net/yum/Server後,就會301到http://www.54rd.net/yum/Server/上了。

==================== html


8.proxy_next_upstream


語法:proxy_next_upstream [error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off];
默認:proxy_next_upstream error timeout;
配置塊:http,server,location
詳解:此配置項表示當向一臺上游服務器轉發請求出現錯誤時,繼續換一臺上游服務器處理這個請求,這樣能夠更好的保證客戶端只收到來自一個上游服務器的應答。proxy_next_upstream的參數用來講明在哪些狀況下會繼續選擇下一臺上游服務器轉發請求:
  1. error:當向上遊服務器發起鏈接,發送請求,讀取響應時出錯時。
  2. timeout:發送請求或者讀取響應發生超時時。
  3. invalid_header:上游服務器發送的響應時不合法時。
  4. http_500:上游服務器返回的HTTP響應碼是500時。
  5. http_502:上游服務器返回的HTTP響應碼是502時。
  6. http_503:上游服務器返回的HTTP響應碼是503時。
  7. http_504:上游服務器返回的HTTP響應碼是504時。
  8. http_404:上游服務器返回的HTTP響應碼是404時。
  9. off:關閉proxy_next_upstream 功能一出錯就選擇另外一臺上游服務器再次轉發。

小結:nginx的反向代理使用起來仍是很方便的,適當的修改配置便可。
相關文章
相關標籤/搜索