我正在尝试设置使用 nginx 作为反向代理在 Linux 上重新映射主机和端口。
到目前为止,我已经有一个工作贫民窟黑客解决方案使用指令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
答案1
使用单独的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
指令将这些元素应用于每个虚拟服务器。
答案2
利用地图模块:
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;
但我不确定这样加入是否可行。