【问题标题】:How do I preserve the requested port when using proxy pass?使用代理通行证时如何保留请求的端口?
【发布时间】:2019-02-12 23:45:55
【问题描述】:

从长远来看,我想要做的是能够通过任何端口连接到任何域,例如,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】:

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

    如果您真的不想这样做,您可以通过执行以下操作来绕过它:

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

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

    【讨论】:

    • 我在顶部将$port 设置为$server_port,不过我会研究单独的服务器指令。
    猜你喜欢
    • 2016-03-29
    • 2014-03-03
    • 2015-02-20
    • 2011-09-03
    • 2021-04-09
    • 1970-01-01
    • 2015-11-01
    • 2020-07-12
    • 2019-09-14
    相关资源
    最近更新 更多