nginx 反向代理配置(二)

     上一篇文章主要是對 nginx 各個模塊作了一個介紹,以及對什麼是反向代理在文章開頭作了一個簡單介紹,這篇文章咱們主要來看下如何進行 nginx 反向代理的配置php

     proxy 模塊html

     nginx 經過 proxy 模塊將客戶端請求代理至上游服務器,此時,nginx 與上游服務器之間是經過 http 協議鏈接的。nginx 在實現反向代理功能時最重要的指令是 proxy前端

_passnginx

     1,proxy_pass URL;正則表達式

           設置後端服務器的協議和地址,這條指令能夠設置的協議是 http 或 https,而地址可使用域名或 ip 地址加端口號的形式來定義,如:後端

proxy_pass http://locahost:8000/uri;

      固然設置反向代理也能夠和負載均衡配合使用,此時,使用方式爲:proxy_pass + http:// upstream 名稱瀏覽器

           若是 proxy_pass 裏面沒有使用 URI,則傳送到後端服務器的請求 URI 通常是客戶端請求的原始 URI;若是 proxy_pass 裏面使用了 URI,則客戶端請求 URI 和配服務器

置路徑匹配的部分會被替換爲指令中定義的 URI,咱們來看一個簡單例子:cookie

           若 nginx 接收到的客戶端請求 URI 是 /name/a.html負載均衡

proxy_pass 不使用 URI:
location /name/ {
        proxy_pass  http://192.168.30.20;
}

傳送到後端服務器的 URI ,http://192.168.30.20/name/a.html

proxy_pass 使用 URI:
location /name/ {
       proxy_pass http://192.168.30.20/remote/;
}
傳送到後端服務器的 URI,http://192.168.30.20/remote/a.html;

location /name/ {
       proxy_pass http://192.168.30.20/;
}
傳送到後端服務器的 URI,http://192.168.30.20/a.html

  在這裏有一個須要注意的細節,地址末尾帶有斜線,實際上被認爲定義了 URI

       若是 location 塊使用了正則表達式定義路徑,則 proxy_pass 指令再也不使用 URI

       若是在 location 塊使用  rewrite 指令重寫了 URI,那麼 nginx 服務器則使用重寫後的 URI 處理請求,而忽略 proxy_pass 中指定的 URI

       2,proxy 模塊的其它指令

             (1),proxy_connect_time time; 和後端服務器創建連接的超時時間

             (2),proxy_cookie_domain domain replacement;

                     設置 "Set-Cookie" 響應頭中 domain 屬性的替代文本,如,proxy_cookie_domain localhost example.org;

                     注:瀏覽器對 cookie 有比較多的限制,若是 cookie 的 domain 屬性和當前頁面的 domain 不匹配則就沒法寫入。因此,若是請求 A 域名,服務器 proxy_pass 至

B 域名,而後 B 服務器輸出 domain=B 的 cookie,前端的頁面依然停留在 A 域名上,因而瀏覽器就沒法將 cookie 寫入

             (3),proxy_set_header field value;

                     從新定義或添加發日後端真實服務器的請求頭,value 能夠包含文本、變量或它們的組合

                     默認狀況下有兩個請求頭會被從新定義:

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

                 Host 的含義是代表請求的主機名,由於 nginx 做爲反向代理,而若是後端真實的服務器設置有相似防盜鏈或根據 http 請求頭中的 host 字段進行路由或判斷功能的話,

若是 nginx 做爲反向代理層不重寫請求頭中的 host 字段,將會致使請求失敗,默認狀況下反向代理服務器會向後端真實服務器發送請求,而且請求頭中的 host 字段應爲 proxy_pass

指令設置的服務器

        下面看一下 X-Forwarded-For、X-Real-IP、remote_addr 這三者之間的區別

相關文章
相關標籤/搜索