使用代理传递时如何保留请求的端口?

问题描述 投票:0回答:1

从长远来看,我想要做的是能够通过任何端口连接到任何域,例如,mysite.com:8000然后通过Nginx让它通过相同的端口路由到内部IP。所以例如192.168.1.114:8000

我查看了iptables,虽然我计划拥有多个域名,所以在这种情况下我真的不适合我(如果我错了,请随时纠正我)。我确保我尝试访问的内部ip和端口是可连接和运行的,并且我正在测试的端口可以从我的网络外部访问。

这是我目前正在使用的Nginx配置:

server {
   set $server "192.168.1.114";
   set $port $server_port;

   listen 80;
   listen 443;
   listen 9000;

   server_name mysite.com;

   location / {
      proxy_pass http://$server:$port;
      proxy_set_header Host $host:$server_port;
   }
}

目前发生的情况是,当我发送请求时,它只是超时。我一直在测试使用端口80和端口9000。关于我可能做错的任何想法?谢谢!

编辑:

我将配置文件更改为如下所示

server {

  listen 9000;

  server_name _;

  location / {
    add_header Content-Type text/html;
    return 200 'test';
  }

我一直得到同样的错误。防火墙已关闭,因此看起来Nginx似乎没有在端口9000上侦听。有关为什么会出现这种情况的任何想法?

nginx nginx-config
1个回答
1
投票

最有效的方法是拥有三个独立的服务器指令,每个端口一个。这样,上游服务器不是动态的,因此Nginx知道它可以保持对每个服务器开放的长期连接。

如果你真的不想这样做,你可以通过做这样的事情来绕过它:

proxy_pass http://upstream_server.example:$server_port;

$port不存在,但$server_port does,所以应该工作。 (它不是$ port,因为每个连接有两个端口:服务器端口和客户端端口,分别是$ server_port和$ remote_port。)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.