一、Nginx中location匹配優先級
location支持各種匹配規則,在多個匹配規則下,Nginx對location的處理是有優先級的, 優先級高的規則會優先進行處理;而優先級低的規則可能會最后處理或者不進行處理。 注意,關于location內容的優先級與其所在的順序無關。 | ||
序號 | Nginx中location匹配優先級 | 說明 |
1 | location ?= / {?? ??? ? [ config A ] } | 這個【優先級最高】 = 符號是最高優先級;這里表示【只匹配斜杠 /】 ,那么就執行config A配置。 |
?2 | location ^~ /images/ { [ config B ] } | ^~ 表示【以什么開頭】這里表示只要是以images開頭的url都執行config B配置。 |
3 | location ~* \.(gif|jpg|png|swf)$ { [ config C ] }? | ~* 表示不區分大小寫; \.(gif|jpg|png|swf)$ 表示以.gif或.jpg或.png或.swf結尾的文件; 都執行config C配置。 注意:\.(斜杠點)表示轉義為.(點) |
4 | location ?/abc/def { [ config D ] } | /abc/def 表示指定/abc/def開頭的url前綴,都執行config D配置。 |
5 | location ?/abc { [ config E ] } | /abc 表示指定/abc開頭的url前綴,都執行config E配置。 |
6 | location ?/ { [ config F ] } | 這個【優先級最低】 / 表示對該網站的所有請求都執行config F配置。 |
二、Nginx中location的應用示例
location主要用于對URL進行匹配。 location支持正則表達式匹配,也支持條件判斷匹配。 | ||
序號 | Nginx中location應用實例 | 說明 |
1 | 配置解析指定路徑下的 指定格式內容 |
|
2 | 配置解析指定目錄 |
|
3 | 配置解析指定文件類型 |
|
?1.1、Nginx配置解析指定路徑下的指定格式內容
????????通過location指令來對網頁URL進行分析處理,所有擴展以.gif、.jpg、.jpeg、.png、.bmp、.swf結尾的靜態文件都交給nginx處理配置,且只解析【/data/wwwroot/www.ixdba.net】路徑下的內容詳細操作:
《1》將一個圖片文件拷貝到【/usr/local/nginx/html】路徑下:
《2》此時可以直接在網址后面添加上圖片名稱即可訪問(如:192.168.1.11/5.jpg)如下圖所示:
《3》修改Nginx的配置文件【/usr/local/nginx/conf/nginx.conf】新增【配置解析指定路徑下的指定格式內容】如下圖所示:
《4》nginx的配置文件修改完成后,查詢當前運行的nginx父進程PID,然后重啟nginx服務讓配置生效
#1-查看系統當前運行的nginx服務,且獲取到當前運行的nginx父進程PID編號命令
ps -ef | grep nginx#2-不間斷nginx業務重啟nginx服務,讓配置生效命令(若:當前運行的nginx父進程的PID是1513)
kill -HUP 1513
《5》若想繼續在網址后面添加上圖片名稱訪問(如:192.168.1.11/5.jpg)則需要將我們的圖片內容放置到指定路徑下
#1-創建nginx指定存放圖片文件的路徑
mkdir -p /data/wwwroot/www.ixdba.net#2-進入nginx指定存放圖片文件的路徑
cd /data/wwwroot/www.ixdba.net/#3-將圖片復制到nginx指定存放圖片文件的路徑
cp -p /usr/local/nginx/html/5.jpg .
????????當前【配置解析指定路徑下的指定格式內容】的路徑下若存放了非圖片的內容,在去網頁訪問該內容時會提示不存在,被過濾掉了,如下圖所示:
?1.2、配置解析指定目錄
《1》先創建需指定解析的目錄
#創建需要nginx指定解析的目錄(即【/data/wwwroot/www.ixdba.net/】目錄下分別創建upload和html目錄)
mkdir -p /data/wwwroot/www.ixdba.net/upload
mkdir -p /data/wwwroot/www.ixdba.net/html
《2》將需要的內容放置到指定的目錄下(比如將ck.html放置到【/data/wwwroot/www.ixdba.net/html】目錄下)
#如將ck.html文件放置到【/data/wwwroot/www.ixdba.net/html】目錄下
cp -p /data/wwwroot/www.ixdba.net/ck.html /data/wwwroot/www.ixdba.net/html/
《3》配置Nginx解析指定路徑下的指定目錄內容
#通過location指令來對網頁URL進行分析處理(即:將upload和html下的所有文件都交給nginx來處理)
#注意upload和html目錄是在/data/wwwroot/www.ixdba.net下的子目錄location ~ ^/(upload|html)/ {root /data/wwwroot/www.ixdba.net;}
《4》nginx的配置文件修改完成后,查詢當前運行的nginx父進程PID,然后重啟nginx服務讓配置生效
#1-查看系統當前運行的nginx服務,且獲取到當前運行的nginx父進程PID編號命令
ps -ef | grep nginx#2-不間斷nginx業務重啟nginx服務,讓配置生效命令(若:當前運行的nginx父進程的PID是1500)
kill -HUP 1500
????????此時重啟nginx的進程后再次訪問【192.168.1.11/html/ck.html】路徑即可訪問到這個網頁了,如下圖所示:
?1.3、配置解析指定類型的文件
《1》配置nginx的配置文件解析指定類型的文件
#location是對此虛擬主機下動態網頁的過濾處理,也就是
#將所有以.jsp為后綴的文件都交給本機的8080端口處理location ~ .*.jsp$ {index index.jsp;proxy_pass http://localhost:8080;}
《2》nginx的配置文件修改完成后,查詢當前運行的nginx父進程PID,然后重啟nginx服務讓配置生效
#1-查看系統當前運行的nginx服務,且獲取到當前運行的nginx父進程PID編號命令
ps -ef | grep nginx#2-不間斷nginx業務重啟nginx服務,讓配置生效命令(若:當前運行的nginx父進程的PID是1500)
kill -HUP 1500
《3》訪問【172.16.213.232/info.jsp】
三、反向代理與正向代理
?3.1、反向代理
? 3.1.1、反向代理簡介及其配置說明
????????反向代理(Reverse Proxy)方式是指通過代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并且將從內部網絡服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器【反向代理服務器與Web服務器一般是處于同一網段內的】。當一個代理服務器能夠代理外部網絡上的訪問請求來訪問內部網絡時,這種代理服務的方式稱為反向代理服務。如下圖所示:
實現反向代理功能的是一個叫做【proxy_pass】的模塊,nginx默認已經擁有這個模塊了。 | |
序號 | 說明 |
1 |
|
2 | 這個最簡單反向代理配置實現的功能是: ????????當訪問www.a.com的時候,所有訪問請求都會轉發到后端172.16.213.18這個服務器的80端口上。 |
這個反向代理實現的功能是:當訪問www.b.com的時候,所有訪問請求都會轉發到后端172.16.213.77這個服務器的5601端口上。與上面那個反向代理實例相比,此反向代理配置增加了一些反向代理屬性,這些屬性一般用于生產環境下對代理性能要求很高的環境中。 建議:將這些反向代理的配置屬性內容單獨寫到一個文件中,然后在配置文件中引用該文件(include)。 | ||
序號 | 反向代理配置項 | 說明 |
1 | proxy_redirect off; | 當上游的Web服務器返回的響應是【重定向】或【刷新請求】時可以重新設置http頭關閉。 |
2 | proxy_set_header Host $host; | 設置由后端的Web服務器獲取客戶端的真實主機名或代理服務器的真實主機名稱。 |
3 | proxy_set_header X-Real-IP $remote_addr; | 設置由后端的Web服務器獲取客戶端的真實IP地址或代理服務器的真實IP地址。 |
4 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | 設置由后端的Web服務器獲取客戶端的真實 IP 地址以及經過的代理服務器 IP。 |
5 | proxy_connect_timeout 90; | 使用Nginx作為反向代理時,可能會遇到后端Web服務器處理時間超過Nginx設置的超時時間;這里設置為90秒。 |
proxy_send_timeout 90; | ?Nginx中用于設置向后端Web服務器發送請求數據的超時時間;這里設置為90秒。 | |
proxy_read_timeout 90; | Nginx代理服務器從后端Web服務器讀取響應的超時時間;這里設置為90秒。 | |
proxy_buffer_size ?4k; | Nginx 中用于配置代理緩沖區大小的重要參數(主要用于控制從后端服務器讀取的初始響應部分(通常是響應頭)的緩沖區大小);一般設置為4k。 | |
proxy_buffers 4 32k; | 指的是一個請求的緩沖區數量和大小。默認是8 4k|8k。 需要看向緩存什么內容:若是靜態資源,則先看看靜態資源的平均大小。一般比較大的基本30kb,此時可填4 32k。具體數量和大小,是要根據系統總內存來設置。number x size的值不能太大,因為這個是一個請求的緩沖區大小,設置太大了,當并發請求很多的時候,內存上升很快,就會存在問題了。所以官網默認的是8 4k|8k。 | |
proxy_busy_buffers_size 64k; | 設置在啟用緩沖響應功能后,當寫緩沖達到一定大小時,Nginx 會向客戶端發送響應的閾值。默認情況下,這個值是?proxy_buffer_size?和?proxy_buffers?指令設置的單塊緩沖大小的兩倍。 | |
proxy_temp_file_write_size 64k; | 用于控制臨時文件的寫入大小。該參數的默認值為8k。 | |
proxy_pass ?http://172.16.213.77:5601; | 反向代理的后端web服務器的IP地址和端口 |
#反向代理多個Web服務器的配置示例
upstream reverseProxyServer {
server 應用服務器A的IP:8080 weight=10 max_fails=2 fail_timeout=10s;
server 應用服務器B的IP:8080 weight=5 max_fails=2 fail_timeout=10s;
server 應用服務器C的IP:8080 weight=5 max_fails=2 fail_timeout=10s;
}server {
listen 80;
server_name localhost;
location / {proxy_pass http://reverseProxyServer;
}
}
? 3.1.2、將反向代理屬性內容配置為文件引用
《1》在nginx的配置路徑下新增該代理配置屬性文件
#1-進入nginx的代理配置路徑
cd /usr/local/nginx/conf#2-創建反向代理配置屬性內容文件
vi proxy.conf#創建的反向代理配置屬性內容
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;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
《2》修改nginx的主配置文件添加location內容包含反向代理配置屬性
#在nginx中添加反向代理屬性項的內容location / {proxy_pass http://192.168.1.16:8080;include /usr/local/nginx/conf/proxy.conf;}
《3》在不影響業務的情況下重啟nginx服務
#1-查看系統當前運行的nginx服務,且獲取到當前運行的nginx父進程PID編號命令
ps -ef | grep nginx#2-不間斷nginx業務重啟nginx服務,讓配置生效命令(若:當前運行的nginx父進程的PID是1513)
kill -HUP 1513
? 3.1.3、Nginx反向代理uri的用法
序號 | 說明 |
1 |
nginx的proxy_pass對于此種情況的處理方式是: ????????將location中的uri傳遞給后端服務器,也就是當客戶端訪問http://www.abc.com/uri/iivey.html 時,會被反向代理到http://192.168.99.100:8000/uri/iivey.html 進行訪問。 |
2 |
nginx的proxy_pass對于此種情況的處理方式是: ????????替換成proxy_pass指令中URL中含有的uri,也就是當客戶端訪問http://www.abc.com/uri/iivey.html 時,會被反向代理到http://192.168.99.100:8000/new_uri/iivey.html 進行訪問。 |
3 |
nginx的proxy_pass對于此種情況的處理方式是: ????????替換成proxy_pass指令中URL中含有的uri,也就是當客戶端訪問http://www.abc.com/uri/iivey.html 時,會被反向代理到http://192.168.99.100:8000/iivey.html 進行訪問。 |
?3.2、正向代理
? ? ? ? 正向代理是指客戶端無法直接訪問外部的web,需要在客戶端所在的網絡內架設一臺代理服務器,客戶端通過代理服務器訪問外部的web(需要在客戶端的瀏覽器中設置代理服務器),這就是正向代理【一般情況下客戶端與代理服務器在同一網段內】。
正向代理適用于:?
?①局域網的代理服務器。
②訪問某個受限網絡的代理服務器,如教育網訪問某些國外網站需要找代理。