nginx如何通過proxy_pass設(shè)置反向代理,隱藏端口號
通過proxy_pass設(shè)置反向代理,隱藏端口號
nginx配置修改,通過 proxy_pass 設(shè)置反向代理,監(jiān)聽域名(IP)轉(zhuǎn)發(fā)到指定端口。
server { listen 80; server_name www.xxx.com; server_name_in_redirect off; proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { proxy_pass http://www.xxx.com:8978; } }
nginx proxy_pass的配置
Nginx的官網(wǎng)將proxy_pass分為兩種類型:
- 不帶URI方式:只包含IP和端口號的,不帶uri(單個/也算uri),比如
proxy_pass http://localhost:8080
; - 帶URI方式:在端口號之后有其他路徑的,包含了只有單個
/
的如proxy_pass http://localhost:8080/
,以及其他路徑,比如proxy_pass http://localhost:8080/abc
。
URL末尾存在 uri
處理邏輯:
代理請求時,會先將請求的uri中和location匹配的部分替換成 proxy_pass 指定的uri,再將最終的uri拼接到代理地址,才是最終訪問的url
如:
location /proxy { proxy_pass http://127.0.0.1:8099/svr1; # uri為'/svr1' }
發(fā)送如下請求:http://localhost:8088/proxy/index.html
詳細解析:
- 請求的uri:/proxy/index.html
- location匹配的部分:/proxy
- proxy_pass 指定的uri:/svr1
- 最終的uri:/svr1/index.html (將請求的uri中和location匹配的部分替換成 proxy_pass 指定的uri)
- 代理地址:http://127.0.0.1:8099
- 最終訪問的url:http://127.0.0.1:8099/svr1/index.html
- 即訪問 http://localhost:8088/proxy/index.html,
- 實際請求路徑為 http://127.0.0.1:8099/svr1/index.html
URL末尾不存在 uri
處理邏輯:
代理請求時,直接將請求的uri拼接到代理地址,就是最終訪問的url
如:
location /proxy2 { proxy_pass http://127.0.0.1:8099; # 無uri }
發(fā)送如下請求:http://localhost:8088/proxy2/index.html
詳細解析:
- 請求的uri:/proxy2/index.html
- 代理地址:http://127.0.0.1:8099
- 最終訪問的url:http://127.0.0.1:8099/proxy2/index.html
- 即訪問 http://localhost:8088/proxy2/index.html,
- 實際請求路徑為 http://127.0.0.1:8099/proxy2/index.html
下面的幾個例子加深理解
server { listen 80; server_name localhost; location /api1/ { proxy_pass http://localhost:8080; } # http://localhost/api1/xxx -> http://localhost:8080/api1/xxx location /api2/ { proxy_pass http://localhost:8080/; } # http://localhost/api2/xxx -> http://localhost:8080/xxx location /api3 { proxy_pass http://localhost:8080; } # http://localhost/api3/xxx -> http://localhost:8080/api3/xxx location /api4 { proxy_pass http://localhost:8080/; } # http://localhost/api4/xxx -> http://localhost:8080//xxx,請注意這里的雙斜線,好好分析一下。 location /api5/ { proxy_pass http://localhost:8080/haha; } # http://localhost/api5/xxx -> http://localhost:8080/hahaxxx,請注意這里的haha和xxx之間沒有斜杠,分析一下原因。 location /api6/ { proxy_pass http://localhost:8080/haha/; } # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx location /api7 { proxy_pass http://localhost:8080/haha; } # http://localhost/api7/xxx -> http://localhost:8080/haha/xxx location /api8 { proxy_pass http://localhost:8080/haha/; } # http://localhost/api8/xxx -> http://localhost:8080/haha//xxx,請注意這里的雙斜杠。 }
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Windows系統(tǒng)下安裝及部署Nginx詳細教程(含多個站點部署)
Nginx是一個很強大的高性能Web和反向代理服務,也是一種輕量級的Web服務器,可以作為獨立的服務器部署網(wǎng)站,應用非常廣泛,這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝及部署Nginx(含多個站點部署)的相關(guān)資料,需要的朋友可以參考下2024-01-01Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化
這篇文章主要介紹了Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化,需要的朋友可以參考下2016-09-09