node.js - 通过 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 的应用程序中运行时,它会返回“端口已在使用中”。我不知道为什么会这样。
解决方案
发生这种情况是因为 NGINX 进程以及 Node 进程试图绑定到端口 4000。如果您在节点进程之前启动 NGINX,则节点将无法启动并显示此错误消息,反之亦然。
如果你想用 NGINX 代理你的 nodeJS 应用程序并且它们在同一台服务器上运行,你必须使用两个不同的端口。
您不能让两个不同的进程同时在同一个端口上侦听...您认为请求如何找到正确的服务?
推荐阅读
- java - 在 Android 中的绘制/布局操作错误期间避免对象分配
- java - 如何检查我的 firebaseUser 是否包含任何 displayName?
- transactions - Websphere 上设置的事务超时
- python - 没有返回记录时的MySQL存储过程
- python - 将迭代保存在不同的 CSV 文件中
- c++ - 比较两个 std::chrono::time_point 实例时出错
- java - Android Studio 4 无法检测到 java 代码并且无法打开 SDK 管理器、设置
- django - 如何使用 Django 将此 if 语句添加到模板并改进 views.py
- r - 带有colnames的素食错误的adonis函数
- shell - shell中的十进制算术显示为找不到命令