使用代理通过时如何保留请求的端口?

时间:2019-02-09 17:06:20

标签: nginx nginx-config

从长远来看,我想做的是能够通过任何端口连接到任何域,例如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上监听。关于为什么可能会出现这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

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

如果您真的不想这样做,则可以通过执行以下操作来解决此问题:

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

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

相关问题