首页 > 解决方案 > 通过 nginx 运行多个 express 应用程序,显示端口已在使用中

问题描述

这是我的 nginx 文件:

server {
    server_name domain.net www.domain.net;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://localhost:3000;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/domain.net/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/domain.net/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = www.domain.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = domain.net) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name domain.net www.domain.net;
    return 404; # managed by Certbot
}

server {
   listen 4000;
   server_name <I input the IP address of the server here without http or slash at the end>;    

   location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_pass http://localhost:4000;
   }
}

当我访问 domain.net 时,它会显示我在端口 3000 上运行的任何应用程序,但是,当我npm start在具有端口 4000 的应用程序中运行时,它会返回“端口已在使用中”。我不知道为什么会这样。

标签: node.jsexpressnginx

解决方案


发生这种情况是因为 NGINX 进程以及 Node 进程试图绑定到端口 4000。如果您在节点进程之前启动 NGINX,则节点将无法启动并显示此错误消息,反之亦然。

如果你想用 NGINX 代理你的 nodeJS 应用程序并且它们在同一台服务器上运行,你必须使用两个不同的端口。

您不能让两个不同的进程同时在同一个端口上侦听...您认为请求如何找到正确的服务?


推荐阅读