Nginx的proxy_pass命令使用
proxy_pass 是 Nginx 中一個(gè)非常重要的指令,用于將請(qǐng)求代理到后端服務(wù)器。本文將詳細(xì)介紹 proxy_pass 的基本用法、配置示例以及一些高級(jí)用法。
1. 基本概念
1.1proxy_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 使用場(chǎng)景
- 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.5if語句
在 location 中使用 if 語句時(shí),proxy_pass 不能包含 URI 部分。
location /google {
if ($geoip_country_code ~ (RU|CN)) {
proxy_pass http://www.google.hk;
}
}
3.6limit_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命令使用 的文章就介紹到這了,更多相關(guān)Nginx proxy_pass 使用 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- nginx配置之proxy_pass示例詳解
- 詳解nginx?中l(wèi)ocation和?proxy_pass的匹配規(guī)則
- Nginx中proxy_pass使用小結(jié)
- Nginx中l(wèi)ocation proxy_pass加與不加/的區(qū)別說明
- Nginx?location和proxy_pass配置示例詳解
- Nginx中proxy_pass的斜杠的兩種方式
- Nginx配置proxy_pass后返回404的問題及解決
- nginx中如何配置proxy_pass
- Nginx rewrite和proxy_pass的區(qū)別及說明
- Nginx中proxy_pass指令斜杠的作用及說明
- Nginx proxy_pass如何到https后端
- nginx代理參數(shù)proxy_pass的實(shí)現(xiàn)
相關(guān)文章
Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)詳解
Nginx是作為一個(gè)反向代理,轉(zhuǎn)發(fā),和負(fù)載均衡的服務(wù)器,也可以用于分布式,下面這篇文章主要給大家介紹了關(guān)于Nginx如何配置根據(jù)路徑轉(zhuǎn)發(fā)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
Nginx 服務(wù)器開啟status頁面檢測(cè)服務(wù)狀態(tài)的方法
這篇文章主要介紹了Nginx 服務(wù)器開啟status頁面檢測(cè)服務(wù)狀態(tài)的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01
Nginx proxy_ssl_server_name 解決后端多域名證書匹配失敗的方法
本文介紹了Nginx反向代理HTTPS后端時(shí)的關(guān)鍵指令proxy_ssl_server_name,當(dāng)后端托管多域名證書時(shí),Nginx需啟用SNI擴(kuò)展以正確匹配證書,本文詳細(xì)分析了問題場(chǎng)景、基礎(chǔ)解決方案,并提供了進(jìn)階配置方案,感興趣的可以了解一下2026-04-04
angular6+springboot實(shí)現(xiàn)前后分離nginx配置
這篇文章主要介紹了angular6+springboot實(shí)現(xiàn)前后分離nginx配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
Nginx實(shí)現(xiàn)TCP和UDP代理的方法步驟
Nginx 1.9.13 及以上版本支持TCP/UDP代理功能,通過配置監(jiān)聽端口、后端服務(wù)器地址等參數(shù),實(shí)現(xiàn)客戶端請(qǐng)求的轉(zhuǎn)發(fā)和響應(yīng)的返回,下面就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2024-12-12
nginx實(shí)現(xiàn)動(dòng)靜分離的方法示例
Nginx的靜態(tài)處理能力很強(qiáng),但是動(dòng)態(tài)處理能力不足,因此,在企業(yè)中常用動(dòng)靜分離技術(shù),本文就詳細(xì)的介紹一下如何使用,感興趣的可以了解一下2021-11-11
nginx支持帶下劃線的header實(shí)現(xiàn)
如果header name中包含下劃線,則忽略掉,本文主要介紹了nginx支持帶下劃線的header實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08

