在 Linux 上使用 nginx 进行类似 Fiddler 的主机和端口重新映射

在 Linux 上使用 nginx 进行类似 Fiddler 的主机和端口重新映射

我正在尝试设置使用 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;

但我不确定这样加入是否可行。

相关内容