Nginx作為反向代理服務器


前言:Nginx通過proxy模塊實現反向代理功能。在作為web反向代理服務器時,nginx負責接收客戶請求,並能夠根據URI、客戶端參數或其它的處理邏輯將用戶請求調度至上游服務器上(upstream server)。nginx在實現反向代理功能時的最重要指令為proxy_pass,它能夠將location定義的某URI代理至指定的上游服務器(組)上。如下面的示例中,location的/uri將被替換為上游服務器上的/newuri。

 

實驗環境:

192.168.2.168 nginx

192.168.2.169 httpd

 

192.168.2.169 配置bbs,嘗試訪問正常:

 

 

192.168.2.168 nginx配置反向代理:

location /forum/ {

          proxy_pass http://192.168.2.169/bbs/;

}

使用正則表達式匹配:

        location ~* ^/bbs/ {

          proxy_pass http://192.168.2.169;
        }

proxy_pass不能出現URI,否則語法錯誤:nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression

但是192.168.2.169 httpd端的訪問日志是192.168.2.168,這並不是我們想要的

nginx反向代理中配置:

 location ~* ^/bbs/ {
          proxy_pass http://192.168.2.169;
          proxy_set_header X-Real-IP $remote_addr;
 }

httpd端修改日志格式:

vim /etc/httpd/conf/httpd.conf

這樣我們再來訪問:日志訪問記錄就是實際的客戶端地址了

 

proxy模塊的可用配置指令非常多,它們分別用於定義proxy模塊工作時的諸多屬性,如連接超時時長、代理時使用http協議版本等。下面對常用的指令做一個簡單說明。

proxy_connect_timeout:nginx將一個請求發送至upstream server之前等待的最大時長;
proxy_cookie_domain:將upstream server通過Set-Cookie首部設定的domain屬性修改為指定的值,其值可以為一個字符串、正則表達式的模式或一個引用的變量;
proxy_cookie_path: 將upstream server通過Set-Cookie首部設定的path屬性修改為指定的值,其值可以為一個字符串、正則表達式的模式或一個引用的變量;
proxy_hide_header:設定發送給客戶端的報文中需要隱藏的首部;
proxy_pass:指定將請求代理至upstream server的URL路徑;
proxy_set_header:將發送至upsream server的報文的某首部進行重寫;
proxy_redirect:重寫location並刷新從upstream server收到的報文的首部;
proxy_send_timeout:在連接斷開之前兩次發送至upstream server的寫操作的最大間隔時長;
proxy_read_timeout:在連接斷開之前兩次從接收upstream server接收讀操作的最大間隔時長;

如下面的一個示例:
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    client_max_body_size 10m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 30;
    proxy_send_timeout 15;
    proxy_read_timeout 15;

總結:Nginx實現反向代理,使用Module ngx_http_proxy_module模塊,proxy_pass指令,設置請求頭為真正的客戶端地址proxy_set_header X-Real-IP $remote_addr;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM