如何配置nginx从多个端口重定向到同一个应用程序?

时间:2017-02-13 11:05:38

标签: node.js nginx

我有一个node.js应用程序,我正在运行nginx作为反向代理服务器。我想通过多种方式访问​​同一个应用程序。

让机器的IP地址为12.16.12.113。 然后我希望通过以下方式访问相同的应用程序:

  1. 12.16.12.113:3000
  2. test.example.com
  3. 我在sites-available目录中有nginx的2个配置文件:

    文件1:

    server {
        listen 80;
    
        server_name test.example.com;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    

    file2的:

    server {
        listen 3000;
    
        server_name default_server;
    
        location / {
            proxy_pass http://localhost:3000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
    

    问题在于,如果我链接sites-enabled目录中的两个文件,则只能通过12.16.12.113:3000访问该应用。如果我删除 file2 ,则可以通过test.example.com访问它。

    但我希望这两种方法都有效。

    编辑1: 根据{{​​3}}回答的建议,我做了以下测试:

    this

    看来nginx没有收听端口80.为什么会这样?

1 个答案:

答案 0 :(得分:0)

实现这一目标的方法很少。

  1. 您可以让您的节点应用程序在12.16.12.113:3000上而不是在localhost:3000上进行侦听,然后您只需要在端口80上使用nginx。

  2. 您可以让您的Node应用程序侦听localhost:3000(但仅限于localhost),然后通过nginx代理12.16.12.113:3000和端口80.

  3. 您可以让您的Node应用程序在任何界面上侦听localhost:4000或0.0.0.0:4000,并使用nginx将请求代理到端口80和3000.

  4. 但是你不能让它们同时听同一个端口和相同的接口而没有问题。

    考虑到您没有包含Node应用程序如何绑定到端口的任何代码示例,这是唯一可以提供的建议,这将是此处唯一的相关信息。