Linux

在 Linux 上使用 nginx 進行類似 Fiddler 的主機和埠重映射

  • October 15, 2017

我正在嘗試使用 nginx 作為反向代理在 Linux 上設置主機和埠重新映射

到目前為止,我已經有了一個使用指令的有效ghetto hack 解決方案,這是evilif

不使用有沒有更好的解決方案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;

但我不確定像這樣加入是否會奏效。

引用自:https://serverfault.com/questions/878359