本文為博主原創,轉載請注明出處:
先查看 一段 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 的意義
表示路徑中正則表達式匹配的第一個參數