Nginx用做反向代理服務器

Nginx做爲反向代理服務器時轉發請求的流程

 

客戶端請求處理
    • 當客戶端請求來時,Nginx並不會馬上轉發到上游服務器,而是想完整的接收到Nginx所在的服務器,
    • 而後再把緩存的客戶端的請求轉發到上游服務器。
    • 優缺點
      • 缺點:請求處理延遲
      • 優勢:下降上游服務器的負載
        • 因爲網絡,以及TCP分包的緣由;一個大的數據包,極可能須要多個TCP鏈接來接受,這樣若是一接受到就轉發,那麼傳完一個請求就須要多個TCP鏈接,對併發性提出考驗。
        • Nginx先把整個請求都放到本身的內存或硬盤中,等待這個請求的全部包都過來了,而後一次性 傳到上游服務器,這樣下降了對上游服務器的併發要求,並且由Nginx於上游服務器時內網,傳輸速度更快。
 
 
使用場景

 
 
非模式匹配定義--uri 不帶入上游
 
    location /bbs {
        proxy_pass http://www.magedu.com:8080/;
    }
訪問      www.localhost.com/bbs -->
代理到    www.mageedu.com:8080/

 

 
模式匹配定義-- uri帶入上游
若是location的URI是經過模式匹配定義的,其URI將直接被傳遞至上游服務器,而不能爲其指定轉換的另外一個URI。
location ^~ /bbs {
        proxy_pass http://www.magedu.com;
    }
訪問:     www.localhost.com/bbs
代理到     www.mageedu.com/bbs

 

注意:此時的上游服務器是不容許有URI 的,不然URL都無效 轉至上游服務器的主頁;
而若是使用正則表達式的URI如 ~ ~* 此時上游服務器帶URI則報錯 
具體報錯
"proxy_pass" cannot have URI part in location given by regular expression, or inside named location, or inside "if" statement, or inside "limit_except"

 

重定向--使用重定向URI 替代反向代理URI
若是在loation中使用的URL重定向,那麼nginx將使用重定向後的URI處理請求,而再也不考慮上游服務器上定義的URI。
以下面所示的例子中,傳送給上游服務器的URI爲/index.php?page=<match>,而不是/index。.
    location / {
        rewrite /(.*)$ /index.php?page=$1 break;
        proxy_pass www.mageedu.com:8080/index;
    }
 
訪問:     www.localhost.com/index.php
代理到     www.mageedu.com:8080/index.php?page=$1
 
proxy模塊指令

 
  • 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接收讀操做的最大間隔時長;
 
反向代理性能優化

在反向代理場景中,nginx有一系列指令可用於定義其工做特性,如緩衝區大小等,給這些指令設定一個合理的值,能夠有效提高其性能。
 
緩衝區設定
nginx在默認狀況下在將其響應給客戶端以前會盡量地接收來自upstream服務器的響應報文,它會將這些響應報文存暫存於本地並儘可能一次性地響應給客戶端。
然而,在來自於客戶端的請求或來自upsteam服務器的響應過多時,nginx會試圖將之存儲於本地磁盤中,這將大大下降nginx的性能。
所以,在有着更多可用內存的場景中,應該將用於暫存這些報文的緩衝區調大至一個合理的值。
 
  • proxy_buffer_size size
    • 設定用於暫存來自於upsteam服務器的第一個響應報文的緩衝區大小;
  • proxy_buffering on|off:
    • 啓用緩衝upstream服務器的響應報文,
    • 不然,若是proxy_max_temp_file_size指令的值爲0,來自upstream服務器的響應報文在接收到的那一刻將同步發送至客戶端;
    • 通常狀況下,啓用proxy_buffering並將proxy_max_temp_file_size設定爲0可以啓用緩存響應報文的功能,並可以避免將其緩存至磁盤中;
  • proxy_buffers 8 4k|8k
    • 用於緩衝來自upstream服務器的響應報文的緩衝區大小;
相關文章
相關標籤/搜索