Nginx中proxy_pass使用小結(jié)
proxy_pass
是 Nginx 中一個(gè)非常重要的指令,用于將請(qǐng)求代理到后端服務(wù)器。本文將詳細(xì)介紹 proxy_pass
的基本用法、配置示例以及一些高級(jí)用法。
1. 基本概念
1.1 proxy_pass 概述
proxy_pass
指令用于將請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器。它可以用于 HTTP 和 Stream 模塊,分別處理 HTTP 請(qǐng)求和 TCP/UDP 流量。
1.2 語法
proxy_pass URL;
- URL:后端服務(wù)器的地址,可以是 HTTP/HTTPS 地址或 TCP/UDP 地址。
1.3 使用場景
- HTTP 代理:將 HTTP 請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器。
- Stream 代理:將 TCP/UDP 流量轉(zhuǎn)發(fā)到后端服務(wù)器。
2. 基本用法
2.1 HTTP 代理
2.1.1 基本示例
server { listen 80; server_name example.com; location / { proxy_pass http://backend_server; } }
在這個(gè)示例中,所有訪問 example.com
的請(qǐng)求都會(huì)被轉(zhuǎn)發(fā)到 backend_server
。
2.1.2 絕對(duì)根路徑 vs 相對(duì)路徑
絕對(duì)根路徑:在 proxy_pass
后面的 URL 以斜杠 /
結(jié)束,表示絕對(duì)根路徑。
location /proxy/ { proxy_pass http://127.0.0.1/; }
例如,訪問 http://example.com/proxy/test.html
會(huì)被轉(zhuǎn)發(fā)到 http://127.0.0.1/test.html
。
相對(duì)路徑:在 proxy_pass
后面的 URL 不以斜杠 /
結(jié)束,表示相對(duì)路徑。
location /proxy/ { proxy_pass http://127.0.0.1; }
例如,訪問 http://example.com/proxy/test.html
會(huì)被轉(zhuǎn)發(fā)到 http://127.0.0.1/proxy/test.html
。
2.2 Stream 代理
stream { upstream backend { server 127.0.0.1:8080; } server { listen 12345; proxy_pass backend; } }
在這個(gè)示例中,所有連接到 12345
端口的 TCP 流量都會(huì)被轉(zhuǎn)發(fā)到 127.0.0.1:8080
。
3. 高級(jí)用法
3.1 正則匹配
當(dāng) location
使用正則表達(dá)式時(shí),proxy_pass
不能包含 URI 部分。
location ~ /testc { proxy_pass http://127.0.0.1:8801; }
如果包含 URI 部分,會(huì)導(dǎo)致配置文件解析錯(cuò)誤:
location ~ /testd { proxy_pass http://127.0.0.1:8801/; # 錯(cuò)誤 }
3.2 變量使用
可以使用變量來動(dòng)態(tài)生成轉(zhuǎn)發(fā)地址。
location /novel/ { proxy_pass http://book-server/books$request_uri; }
例如,訪問 http://example.com/novel/three-body.html?page=3
會(huì)被轉(zhuǎn)發(fā)到 http://book-server/books/novel/three-body.html?page=3
。
3.3 重定向
Nginx 會(huì)在某些情況下自動(dòng)進(jìn)行 301 重定向,例如當(dāng)請(qǐng)求的 URI 沒有以斜杠 /
結(jié)束,但 Nginx 認(rèn)為這是一個(gè)目錄時(shí)。
location /films/nature/ { proxy_pass http://film-server; }
如果訪問 http://example.com/films/nature
,Nginx 會(huì)返回 301 重定向到 http://example.com/films/nature/
。
3.4 精確匹配
可以使用精確匹配來避免 301 重定向。
location /films/nature/ { proxy_pass http://film-server; } location = /films/nature { proxy_pass http://film-server; }
3.5 if 語句
在 location
中使用 if
語句時(shí),proxy_pass
不能包含 URI 部分。
location /google { if ($geoip_country_code ~ (RU|CN)) { proxy_pass http://www.google.hk; } }
3.6 limit_except
在 limit_except
中使用 proxy_pass
時(shí),不能包含 URI 部分。
location /yongfu/ { proxy_pass http://unix:/tmp/backend.socket:/uri/; limit_except PUT DELETE { proxy_pass http://127.0.0.1:9080; } }
4. 實(shí)際案例
4.1 轉(zhuǎn)發(fā)到多個(gè)后端服務(wù)器
upstream backend_servers { server 192.168.1.10:8080; server 192.168.1.11:8080; server 192.168.1.12:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend_servers; } }
4.2 轉(zhuǎn)發(fā)到不同路徑
server { listen 80; server_name example.com; location /api/ { proxy_pass http://api_server/; } location /static/ { proxy_pass http://static_server/; } }
4.3 轉(zhuǎn)發(fā)到 Unix Domain Socket
server { listen 80; server_name example.com; location / { proxy_pass http://unix:/tmp/backend.socket:/uri/; } }
到此這篇關(guān)于Nginx中proxy_pass使用小結(jié)的文章就介紹到這了,更多相關(guān)Nginx proxy_pass使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明
- Nginx?location和proxy_pass配置示例詳解
- Nginx中proxy_pass的斜杠的兩種方式
- Nginx的location路徑與proxy_pass匹配規(guī)則說明
- Nginx捕獲并自定義proxy_pass返回的錯(cuò)誤問題
- nginx中如何配置proxy_pass
- Nginx rewrite和proxy_pass的區(qū)別及說明
- Nginx proxy_pass如何到https后端
- nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)
- nginx反向代理proxy_pass遇到的死循環(huán)問題
- 解決nginx配置proxy_pass之后,響應(yīng)變慢的問題
- Nginx使用if指令實(shí)現(xiàn)多個(gè)proxy_pass方式
相關(guān)文章
Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn)
這篇文章主要介紹了Mac M1 Nginx 配置多站點(diǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03nginx添加http_ssl_module并且配置域名指定端口的操作方法
這篇文章主要介紹了nginx添加http_ssl_module并且配置域名指定端口的操作方法,文末附帶linux下防火墻和開放端口,需要的朋友可以參考下2023-11-11nginx實(shí)現(xiàn)負(fù)載均衡和動(dòng)靜分離
這篇文章主要為大家詳細(xì)介紹了nginx實(shí)現(xiàn)負(fù)載均衡和動(dòng)靜分離,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-03-03Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例
這篇文章主要介紹了Nginx實(shí)現(xiàn)靜態(tài)資源的反向代理實(shí)例,本文通過分析github發(fā)現(xiàn)這個(gè)應(yīng)用,可以避免在https的網(wǎng)站中出現(xiàn)http鏈接,需要的朋友可以參考下2015-03-03