最稳妥的部署方式是Nginx反向代理本地Express应用:Express监听127.0.0.1,Nginx配置proxy_pass及必要请求头,WebSocket需额外配置Upgrade和Connection头,并验证配置后重载。

直接用 Nginx 把用户请求转给本地运行的 Express 应用,是最常见也最稳妥的部署方式。核心就三点:Express 监听回环地址、Nginx 配置 proxy_pass、关键请求头不能少。
确保 Express 只监听 127.0.0.1
Express 启动时别绑定 0.0.0.0 或公网 IP,只对本机开放:
- app.listen(3000, '127.0.0.1', () => { ... })
- 这样既安全,又避免被外部直连绕过 Nginx
- 确认服务能通过
curl http://127.0.0.1:3000访问通
Nginx 配置基础反向代理
在 /etc/nginx/conf.d/myapp.conf(Linux)或 conf/conf.d/myapp.conf(Windows)里写:
Node.js 可靠编程技能。避免事件循环阻塞、异步陷阱、ESM 兼容问题和内存泄漏。触发词:Node.js 开发、async/await、流处理、性能优化、安全编码。
- server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
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_pass末尾不加/,否则路径会被截断;加了会把/api/users变成/users - 务必保留
Host和X-Forwarded-*头,否则 Express 的req.hostname、req.protocol会出错
需要支持 WebSocket(比如 Socket.IO)
如果 Express 用了长连接,必须单独配一段:
- location /socket.io/ {
proxy_pass http://127.0.0.1:3000/socket.io/;
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-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} - 注意
Upgrade和Connection两个头缺一不可 - 路径结尾的
/要和proxy_pass保持一致,不然 socket 连接会 404
验证与重启
配置完别忘了检查并重载:
-
sudo nginx -t确认语法无误 -
sudo systemctl reload nginx(Linux)或双击 nginx.exe(Windows) - 访问
http://example.com,看是否返回 Express 的响应 - 用浏览器开发者工具检查 Network → Headers,确认
X-Forwarded-For等头已透传

















