Nginx的反向代理與正向代理及其location的配置說明

一、Nginx中location匹配優先級

Nginx中location匹配優先級

location支持各種匹配規則,在多個匹配規則下,Nginx對location的處理是有優先級的,

優先級高的規則會優先進行處理;而優先級低的規則可能會最后處理或者不進行處理。

注意,關于location內容的優先級與其所在的順序無關。

序號Nginx中location匹配優先級說明
1location ?= / {?? ??? ?
[ config A ]
}

這個【優先級最高】

= 符號是最高優先級;這里表示【只匹配斜杠 /】 ,那么就執行config A配置。

?2location ^~ /images/ {
[ config B ]
}
^~ 表示【以什么開頭】這里表示只要是以images開頭的url都執行config B配置。
3location ~* \.(gif|jpg|png|swf)$ {
[ config C ]
}?

~* 表示不區分大小寫;

\.(gif|jpg|png|swf)$ 表示以.gif或.jpg或.png或.swf結尾的文件;

都執行config C配置。

注意:\.(斜杠點)表示轉義為.(點)

4location ?/abc/def {
[ config D ]
}
/abc/def 表示指定/abc/def開頭的url前綴,都執行config D配置。
5location ?/abc {
[ config E ]
}
/abc 表示指定/abc開頭的url前綴,都執行config E配置。
6location ?/ {
[ config F ]
}

這個【優先級最低】

/ 表示對該網站的所有請求都執行config F配置。

二、Nginx中location的應用示例

Nginx中location應用示例
location主要用于對URL進行匹配。 location支持正則表達式匹配,也支持條件判斷匹配。
序號Nginx中location應用實例說明
1

配置解析指定路徑下的

指定格式內容

#通過location指令來對網頁URL進行分析處理,所有擴展名以.gif、.jpg、
#.jpeg、.png、.bmp、.swf結尾的靜態文件都交給nginx處理配置,且只解析
#【/data/wwwroot/www.ixdba.net】路徑下的內容location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  {root    /data/wwwroot/www.ixdba.net;}
2配置解析指定目錄
#通過location指令來對網頁URL進行分析處理
#(即:將upload和html下的所有文件都交給nginx來處理)
#注意upload和html目錄是在/data/wwwroot/www.ixdba.net下的子目錄location ~ ^/(upload|html)/  {root    /data/wwwroot/www.ixdba.net;}
3配置解析指定文件類型
#location是對此虛擬主機下動態網頁的過濾處理,也就是
#將所有以.jsp為后綴的文件都交給本機的8080端口處理location ~ .*.jsp$ {index index.jsp;proxy_pass http://localhost:8080;}

?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
#最簡單的反向代理配置示例
server {listen       80;server_name  www.a.com;location / {proxy_pass  http://172.16.213.18;}
}
2

這個最簡單反向代理配置實現的功能是:

????????當訪問www.a.com的時候,所有訪問請求都會轉發到后端172.16.213.18這個服務器的80端口上。

典型的反向代理服務器配置
#典型反向代理服務器配置
server {listen       80;server_name  www.b.com;location / {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;proxy_pass  http://172.16.213.77:5601;}
}

這個反向代理實現的功能是:當訪問www.b.com的時候,所有訪問請求都會轉發到后端172.16.213.77這個服務器的5601端口上。與上面那個反向代理實例相比,此反向代理配置增加了一些反向代理屬性,這些屬性一般用于生產環境下對代理性能要求很高的環境中。

建議:將這些反向代理的配置屬性內容單獨寫到一個文件中,然后在配置文件中引用該文件(include)。

序號反向代理配置項說明
1proxy_redirect off;當上游的Web服務器返回的響應是【重定向】或【刷新請求】時可以重新設置http頭關閉。
2proxy_set_header Host $host;設置由后端的Web服務器獲取客戶端的真實主機名或代理服務器的真實主機名稱。
3proxy_set_header X-Real-IP $remote_addr;設置由后端的Web服務器獲取客戶端的真實IP地址或代理服務器的真實IP地址。
4proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;設置由后端的Web服務器獲取客戶端的真實 IP 地址以及經過的代理服務器 IP。
5proxy_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的用法

Nginx反向代理uri的用法
序號說明
1
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000;}
}

nginx的proxy_pass對于此種情況的處理方式是:

????????將location中的uri傳遞給后端服務器,也就是當客戶端訪問http://www.abc.com/uri/iivey.html 時,會被反向代理到http://192.168.99.100:8000/uri/iivey.html 進行訪問。

2
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000/new_uri/;}}

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
server {server_name www.abc.com;location /uri/ {proxy_pass http://192.168.99.100:8000/;}}

nginx的proxy_pass對于此種情況的處理方式是:

????????替換成proxy_pass指令中URL中含有的uri,也就是當客戶端訪問http://www.abc.com/uri/iivey.html 時,會被反向代理到http://192.168.99.100:8000/iivey.html 進行訪問。
這種反向代理方式其實是上面第二種uri代理方式的擴展,這里要重點注意下“proxy_pass http://192.168.99.100:8000/;” 這個url結尾有個“/"和沒有”/"的區別。

?3.2、正向代理

? ? ? ? 正向代理是指客戶端無法直接訪問外部的web,需要在客戶端所在的網絡內架設一臺代理服務器,客戶端通過代理服務器訪問外部的web(需要在客戶端的瀏覽器中設置代理服務器),這就是正向代理【一般情況下客戶端與代理服務器在同一網段內】。
正向代理適用于:?
?①局域網的代理服務器。
②訪問某個受限網絡的代理服務器,如教育網訪問某些國外網站需要找代理。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95475.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

神經網絡正則化三重奏:Weight Decay, Dropout, 和LayerNorm

正則化是機器學習中防止模型過擬合、提升泛化能力的核心技術。Weight Decay、Dropout和LayerNorm是三種最常用的方法,但它們的工作原理和首要目標截然不同。下面的流程圖揭示了它們的核心區別與聯系: #mermaid-svg-vymek6mFvvfxcWiM {font-family:"…

兩臺電腦通過網線直連共享數據,設置正確,卻互相ping不通的解決方法

因為某些原因,需要兩臺電腦互傳資源,但是某臺電腦可能無法連接外網。如果手頭有根網線,很容易想到通過一根網線連接兩臺電腦互傳數據。 這里先說一下基本的設置: 兩臺電腦最好都關閉防火墻;兩臺電腦都打開專用網絡和公…

面試新紀元:無聲勝有聲,讓AI成為你頸上的智慧伙伴

面試,無論是對于面試官還是求職者,都像一場無聲的戰爭。 一方要精準識人,一方要完美自薦;一方怕問不到點子上,一方怕答不到心坎里。 緊張、遺忘、表達失誤、準備不足……這些問題幾乎每個人都經歷過。 有沒有一種方…

qt-C++筆記之QtDesigner-Creator按鈕圖標與樣式

qt-C筆記之QtDesigner-Creator按鈕圖標與樣式 整理:如何用 .qrc 管理資源、在 Designer/Creator 中為 QPushButton 設置圖標(資源或系統主題),以及用樣式表調整文字樣式。涵蓋 C/Qt 與 PySide/PyQt;Linux 桌面優先&am…

maven 常用指令

Maven 是 Java 項目構建和依賴管理的得力助手。這里為你總結了一些常用指令,希望能幫你提升開發效率。下面這個表格匯總了 Maven 最核心和常用的一些命令:命令主要功能典型使用場景mvn clean清理項目,刪除 target 目錄及其所有編譯輸出文件。…

# pdf.js完全指南:構建現代Web PDF查看與解析解決方案

在當今Web開發中,實現高質量的PDF查看功能一直是前端開發者面臨的挑戰之一。作為最受歡迎的JavaScript PDF庫,pdf.js已經成為解決這一問題的行業標準。由Mozilla開發并維護的pdf.js項目,通過純JavaScript實現PDF解析與渲染,徹底改…

高效對象屬性復制工具

日常編程中,經常會碰到對象屬性復制的場景,比如 VO、DTO、PO、VO 等之間的轉換,關于什么是VO、DTO、PO、VO 等可以看上篇文章,VO、DTO、PO、VO 等對象具體有哪些方式可以使用呢? set/get 方式 性能最好的方式&#x…

大疆圖傳技術參數對比 你了解多少?

無人機是現代航空技術與智能控制技術結合的產物,已從軍事領域廣泛滲透至民用場景,成為推動各行業效率升級的關鍵工具。無人機的全稱為 “無人駕駛航空器(Unmanned Aerial Vehicle,簡稱 UAV)”,簡言之&#…

Redis 緩存熱身(Cache Warm-up):原理、方案與實踐

在 Redis 緩存架構中,“緩存熱身”是指在系統正式提供服務前(如重啟、擴容后),主動將熱點數據加載到 Redis 中的操作。其核心目標是避免**緩存穿透**(請求直達數據庫)和**緩存雪崩**(大量請求同…

基于SpringBoot的大學生就業招聘系統

1. 在線演示: 后臺:http://springbootiv1oo.xiaobias.com/springbootiv1oo/admin/dist/index.html 前臺:http://springbootiv1oo.xiaobias.com/springbootiv1oo/front/index.html 管理員:abo/abo 用戶:用戶1/123456、…

Java反序列化漏洞揭秘:從原理到攻擊實戰

一、背景 熟悉接口開發的同學一定知道,能將數據對象很輕松的實現多平臺之間的通信、對象持久化存儲,序列化和反序列化是一種非常有效的手段,例如如下應用場景,對象必須 100% 實現序列化。 DUBBO:對象傳輸必須要實現序…

Time-MOE 音頻序列分類任務

prompt 我準備做語音疾病分類任務。語音音頻是 WAV 格式的音頻,基本上分為兩類,分別是疾病類和非疾病類。也有少數數據集是多分類,現在我找到了26個數據集,我準備我已經在 MLP CNN 上面測試了它們的基準,下面我找到了一…

[嵌入式embed][Qt]Qt5.12+Opencv4.x+Cmake4.x_測試Qt編譯的opencv4.x的庫

[嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_測試Qt編譯的opencv4.x的庫編譯Qt-Opencv庫測試流程-①創建一個簡單的qt-ui工程配置 & 測試配置庫編譯環境測試代碼百度云-工程(opencv4.xqt5.12的工程)參考文檔編譯Qt-Opencv庫 [嵌入式embed][Qt]Qt5.12Opencv4.xCmake4.x_用Qt…

相較于傳統AR礦物鑒定有哪些優勢?

與傳統的礦物鑒定方法相比,AR礦物鑒定就像是一位全面升級的“超級助手”,展現出了無可比擬的優勢。傳統的礦物鑒定方法,往往依賴于地質學家或專業鑒定人員的豐富經驗。他們需要通過肉眼觀察礦物的顏色、光澤、硬度等物理特征,再結…

第5節:分布式文件存儲

本節主要是講解的是分布式文件存儲,主要介紹了阿里云OSS云存儲和Minio文件存儲,本章重點主要是掌握怎么在SpringBoot項目里面接入文件存儲。 記錄、交流、實踐,讓每一份付出皆可看見,讓你我共同前行😁 1.分布式文件存…

當 GitHub 宕機時,我們如何協作?

一、引言1.1 GitHub 的重要性及宕機影響在當今軟件開發的生態系統中,GitHub 已然成為全球開發者不可或缺的核心平臺。它為無數開源項目與企業級開發團隊提供了高效的代碼托管、版本控制、協作開發以及項目管理等服務。然而,2025 年 8 月那場波及全球的 G…

Ansible 常用模塊歸納總結

[studentmaster ansible]$ ansible-galaxy collection install http://ansible.example.com/materials/community-general-6.3.0.tar.gz -p collections/##將第三方模塊下載到collections下 [studentmaster ansible]$ ansible-galaxy collection install http://ansible.exampl…

計算機網絡:概述層---TCP/IP參考模型

🌐 TCP/IP四層模型詳解:互聯網的核心協議架構深度剖析 📅 更新時間:2025年9月3日 🏷? 標簽:TCP/IP模型 | 互聯網協議 | 四層模型 | 計算機網絡 | 協議棧 | 網絡通信 | 王道考研 摘要: 本文將深入淺出地解析…

打工人日報#20250902

打工人日報#20250902 今天晚上去了玄武湖,來南京三次了,終于來了一次知識點 不確定度 “不確定度” 是測量領域的核心概念,用于量化測量結果的可靠性與分散程度—— 簡單來說,它回答了 “這個測量值有多可信?真實值可能…

告別手動復制粘貼:C# 實現 Excel 與 TXT 文本文件高效互轉

在日常辦公和數據處理工作中,Excel 和 TXT文本文件是兩種常見的數據存儲格式。Excel文件適合進行復雜的數據分析、公式運算和圖表生成,而 TXT文件則更適合用于存儲和傳輸純文本數據,如日志、配置文件或簡單的數據列表。很多時候,我…