【问题标题】:Forwarding port 80 to 8080 using NGINX [closed]使用 NGINX 将端口 80 转发到 8080 [关闭]
【发布时间】:2014-09-11 17:38:14
【问题描述】:

我在我的 debian 服务器上使用 LEMP 堆栈和 Node JS。 Nginx 在 80 端口上工作,Node JS 在 8080 上工作。我为 nodejs 应用程序创建了新的子域:cdn.domain.com。目前我只能像 cdn.domain.com:8080/ 这样访问 Node JS 应用程序。我想要做的是配置 Nginx,以便当我进入 cdn.domain.com 时,我可以让应用程序在端口 80 上运行。我认为可以使用 nginx 上游来完成。但我不知道怎么做。

【问题讨论】:

标签: node.js nginx proxy debian


【解决方案1】:

就这么简单,

确保将 example.com 更改为您的域(或 IP),并将 8080 更改为您的 Node.js 应用程序端口:

server {
    listen 80;
    server_name example.com;

    location / {
        proxy_set_header   X-Forwarded-For $remote_addr;
        proxy_set_header   Host $http_host;
        proxy_pass         "http://127.0.0.1:8080";
    }
}

来源:https://eladnava.com/binding-nodejs-port-80-using-nginx/

【讨论】:

  • 您好,使用此解决方案,我需要向外部开放端口 8080 还是打开端口 80 就足够了。谢谢
  • 无需打开8080端口或其他任何端口。开80就够了。
  • 它工作了???谢谢你..
  • 应该在nginx.conffile 中吗?
  • @alper 是的,当然
【解决方案2】:

NGINX 通过允许在客户端和后端服务器之间建立隧道来支持 WebSockets。为了让 NGINX 将升级请求从客户端发送到后端服务器,升级和连接头必须显式设置。例如:

# WebSocket proxying
map $http_upgrade $connection_upgrade {
    default         upgrade;
    ''              close;
}


server {
    listen 80;

    # The host name to respond to
    server_name cdn.domain.com;

    location / {
        # Backend nodejs server
        proxy_pass          http://127.0.0.1:8080;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade     $http_upgrade;
        proxy_set_header    Connection  $connection_upgrade;
    }
}

来源:http://nginx.com/blog/websocket-nginx/

【讨论】:

  • 问题不在于 websocket,而在于 HTTP。
【解决方案3】:

简单的是:

server {
    listen   80;
    server_name  p3000;
    location / {
        proxy_pass http://0.0.0.0:3000;
        include /etc/nginx/proxy_params;
    }
}

【讨论】:

  • 赞成包含/etc/nginx/proxy_params,这显然是要使用的。您可以使用cdn.domain.com 而不是p3000 使这个答案更清楚。但这对我来说效果很好,我想知道为什么所有其他答案都建议使用upstream(现在必须检查一下......)。
【解决方案4】:

您可以通过sudo vi /etc/nginx/sites-available/default 中的以下内容轻松完成此操作

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    server_name _ your_domain;

    location /health {
            access_log off;
            return 200 "healthy\n";
    }

    location / {
            proxy_pass http://localhost:8080; 
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_cache_bypass $http_upgrade;
    }
  }

【讨论】:

    【解决方案5】:

    这就是你实现这一目标的方法。

    upstream {
        nodeapp 127.0.0.1:8080;
    }
    
    server {
        listen 80;
    
        # The host name to respond to
        server_name cdn.domain.com;
    
        location /(.*) {
            proxy_pass http://nodeapp/$1$is_args$args;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Real-Port $server_port;
            proxy_set_header X-Real-Scheme $scheme;
        }
    }
    

    您还可以使用此配置在多个 Node 进程之间进行负载平衡,如下所示:

    upstream {
        nodeapp 127.0.0.1:8081;
        nodeapp 127.0.0.1:8082;
        nodeapp 127.0.0.1:8083;
    }
    

    您在不同进程中在端口 8081、8082 和 8083 上运行节点服务器的位置。 Nginx 将轻松地在这些服务器进程之间对您的流量进行负载平衡。

    【讨论】:

    • 貌似 upstream 在最新的 nginx,比如 1.4.6 中不起作用。
    • 我觉得语法不一样:upstream name { server ... }
    【解决方案6】:

    您可以定义一个上游并在 proxy_pass 中使用它

    http://rohanambasta.blogspot.com/2016/02/redirect-nginx-request-to-upstream.html

    server {  
       listen        8082;
    
       location ~ /(.*) {  
           proxy_pass  test_server;  
           proxy_set_header Host $host;  
           proxy_set_header X-Real-IP $remote_addr;  
           proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
           proxy_set_header X-Forwarded-Proto $scheme;  
           proxy_redirect    off;  
       }  
    
    }   
    
      upstream test_server  
         {  
             server test-server:8989  
    }  
    

    【讨论】:

    • 请详细说明您的答案。用户应该能够理解您的建议,而无需点击将来可能无法使用的非现场链接。
    【解决方案7】:

    这对我有用:

    server {
      listen  80; 
      server_name example.com www.example.com;
    
      location / { 
        proxy_pass                          http://127.0.0.1:8080/;
        proxy_set_header Host               $host;
        proxy_set_header X-Real-IP          $remote_addr;  
        proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
      }
    }
    

    如果它对您不起作用,请查看 sudo tail -f /var/log/nginx/error.log 的日志

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 2015-01-06
      • 1970-01-01
      • 2013-12-08
      • 2020-09-03
      • 2017-07-18
      • 2018-01-25
      相关资源
      最近更新 更多