Linux
在 Linux 上使用 nginx 進行類似 Fiddler 的主機和埠重映射
我正在嘗試使用 nginx 作為反向代理在 Linux 上設置主機和埠重新映射。
到目前為止,我已經有了一個使用指令的有效ghetto hack 解決方案,這是evil。
if
不使用有沒有更好的解決方案
if
?我嘗試過的 - nginx 配置
/etc/nginx/nginx.conf(或一些 /etc/nginx/conf.d/*.conf 文件):
server { listen 3000; server_name dev.example.com test.example.com prod.example.com location / { if ($http_host ~ dev.example.com) { proxy_pass 127.0.0.1:13000; } if ($http_host ~ test.example.com) { proxy_pass 127.0.0.1:23000; } if ($http_host ~ prod.example.com) { proxy_pass 127.0.0.1:33000; } } }
/etc/hosts:
127.0.0.1 dev.example.com 127.0.0.1 test.example.com 127.0.0.1 prod.example.com
我想做的 - Fiddler HOSTS 配置
對於那些熟悉 Fiddler 的人,我正在嘗試模擬這個HOSTS 配置:
localhost:13000 dev.example.com:3000 localhost:23000 test.example.com:3000 localhost:33000 prod.example.com:3000
使用單獨的
server
塊:server { server_name dev.example.com; listen 3000; proxy_pass http://127.0.0.1:13000; } server { server_name test.example.com; listen 3000; proxy_pass http://127.0.0.1:23000; }
另一個為
prod.example.com
.如果這些站點配置包含公共元素,請將它們包含在另一個文件中並使用
include
指令將這些元素應用於每個虛擬伺服器。
利用地圖模組:
http
語境:map $http_host $proxy_target { "dev.example.com" "127.0.0.1:13000"; "test.example.com" "127.0.0.1:23000"; "prod.example.com" "127.0.0.1:33000"; }
server
語境:proxy_pass $proxy_target;
此外,您可以嘗試僅區分埠,並使用類似
proxy_pass 127.0.0.1:$proxy_port;
但我不確定像這樣加入是否會奏效。