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和反向代理服務(wù),也是一種輕量級的Web服務(wù)器,可以作為獨立的服務(wù)器部署網(wǎng)站,應(yīng)用非常廣泛,這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下安裝及部署Nginx(含多個站點部署)的相關(guān)資料,需要的朋友可以參考下2024-01-01
Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化
這篇文章主要介紹了Nginx使用的php-fpm的兩種進程管理方式及優(yōu)化,需要的朋友可以參考下2016-09-09

