nginx 負載均衡 proxy_pass 與 upstream 及 rewrite ,expires 的配置總結


本文為博主原創,轉載請注明出處:

  先查看 一段 nginx 相關的配置:

location /test/   {
  set $arg_remote_addr $request_id;
  proxy_pass https:
//self-in_slb_test_service_01; set $resp_status "-"; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_next_upstream error timeout;
  rewrite
/copyrighttest(.*) $1 break; expires off; } upstream self-in_slb_test_service_01 { server 112.118.0.154:8000 max_fails=0 fail_timeout=180 weight=1;
server 112.118.0.155:8000 max_fails=0 fail_timeout=180 weight=1;
 keepalive 64; 
}

 

  根據上述的配置,分別探究 prxoy_pass與 upstream  , rewrite的配置與功能

1.  prxoy_pass與 upstream 配置與功能:

  prxoy_pass 用來指定當前模塊中請求的URL 或服務器的地址,當配置指定訪問的URL 時,其配置如下:

 proxy_pass http://localhost:8000/uri/;

  當配置多個服務器地址時,需要配合 nginx 的 upstream 模塊一起使用。upstream 為nginx 的負載均衡模塊。

  Nginx 實現負載均衡需要基於 upstream 模塊,同時需要設置 location proxy_pass 轉發指令實現。

  最上面示例中的 upstream self-in_slb_test_service_01 中的 self-in_slb_test_service_01 為負載均衡的模塊的名稱,可以任意指定,但需要與vhosts.conf, nginx.conf 虛擬主機中的 proxy_pass 段保持一致,否則不能將請求轉發到指定的后端服務器, weight 表示 權重,fail_timeout內檢查 max_fails 次數,失敗則剔除均衡。

2. expires 配置

  expires  定義用戶瀏覽器緩存的時間,通過 Expires 參數設置,可以使瀏覽器緩存過期時間,減少與服務器之前的請求和流量。具體 Expires 定義是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。如果靜態頁面不常更新,可以設置 指定的時間,這樣可以節省帶寬和緩解服務器的壓力,在瀏覽器保存該類型文件的天數。expires  off 為關閉緩存。其設置可以參考如下:

expires 3d;  # 緩存3天

3. Nginx Rewrite 規則  

  Rewirte 規則也稱為規則重寫,主要功能是實現瀏覽器訪問 HTTP URL 的跳轉,其正則表達式是基於 Perl 語言。通常而言,幾乎所有的 WEB 服務器均可以支持 URL 重寫。

  URL 規則重寫的用途:

    1.隱藏網站 URL 真實地址,瀏覽器顯示更加美觀;

    2.網站變更升級,可以基於 Rewrite 臨時重定向到其他頁面。

  Nginx Rewrite 規則使用中有三個概念需要理解,分別是:Rewrite 結尾標識符、Rewrite規則常用表達式、Nginx Rewrite 變量,如下為三個概念的詳解:

    (1)Nginx Rewrite 結尾標識符,用於 Rewrite 規則末尾,表示規則的執行屬性   

        last :      相當於 Apache 里的(L)標記,表示完成 rewrite 匹配;
        break:      本條規則匹配完成后,終止匹配,不再匹配后面的規則。
        redirect:     返回 302 臨時重定向,瀏覽器地址會顯示跳轉后的 URL 地址。
        permanent:     返回 301 永久重定向,瀏覽器地址欄會顯示跳轉后的 URL 地址。
      其中 last 和 break 用來實現 URL 重寫時,瀏覽器地址欄 URL 地址不變。

      (2)Nginx Rewrite 規則常用表達式,主要用於匹配參數、字符串及過濾設置。

        .         匹配任何單字符;      

        [word]          匹配字符串:word;

        [^word]      不匹配字符串:word;
        jfedu|jfteach   可選擇的字符串:jfedu|jfteach;
        ?          匹配 0 到 1 個字符;
        *        匹配 0 到多個字符;
        +        匹配 1 到多個字符;
        ^        字符串開始標志;
        $        字符串結束標志;
        \n          轉義符標志。

     (3)Nginx Rewrite 變量,常用於匹配 HTTP 請求頭信息、瀏覽器主機名、URL 等。

HTTP_USER_AGENT              用戶使用的代理,例如瀏覽器;
HTTP_REFERER                告知服務器,從哪個頁面來訪問的;
HTTP_COOKIE                 客戶端緩存,主要用於存儲用戶名和密碼等信息;
HTTP_HOST                  匹配服務器 ServerName 域名;
HTTP_ACCEPT                 客戶端的瀏覽器支持的 MIME 類型;
REMOTE_ADDR                 客戶端的 IP 地址
QUERY_STRING                URL 中訪問的字符串;
DOCUMENT_ROOT                服務器發布目錄;
SERVER_PORT                 服務器端口;
SERVER_PROTOCOL              服務器端協議;
TIME_YEAR                  年;
TIME_MON                  月;
TIME_DAY                  日;

      (4) 示例配置

        將 testa.net 跳轉至 www.testb.net。    

      if ($host = 'testa.net' ) {           rewrite ^/(.*)$ http://www.testb.net/$1  permanent;       }

        訪問/test/test01/跳轉至/newindex.html,瀏覽器地址不變。 

      rewrite  ^/jfedu/test01/$  /newindex.html  last;

 

4. $1,$2 的意義

  表示路徑中正則表達式匹配的第一個參數

  

 


免責聲明!

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



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