在 CentOS 上,Node.js 本身一般不直接对外暴露,而是通过 反向代理(Reverse Proxy) 来转发请求。最常见、稳定的方案是 Nginx + Node.js。下面给你一套从零到可用的完整配置示例。
用户请求
↓
Nginx(80 / 443)
↓
Node.js(如 3000 端口)
curl -fsSL https://rpm.nodesource.com/setup_18.x | sudo bash -
sudo yum install -y nodejs
验证:
node -v
npm -v
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200);
res.end('Hello Node.js');
});
server.listen(3000, () => {
console.log('Node.js running on port 3000');
});
启动:
node app.js
✅ 此时 只能本机访问 3000 端口
sudo yum install -y epel-release
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo vi /etc/nginx/conf.d/nodejs.conf
server {
listen 80;
server_name example.com; # 改为你的域名或服务器 IP
location / {
proxy_pass http://127.0.0.1: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;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
✅ 最关键的一行:
proxy_pass http://127.0.0.1:3000;
sudo nginx -t
sudo systemctl reload nginx
浏览器访问:
http://服务器IP 或 http://example.com
✅ 看到 Node.js 返回内容即成功
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
或关闭防火墙(不推荐生产):
sudo systemctl stop firewalld
✅ 建议使用进程管理工具:
npm install -g pm2
pm2 start app.js
pm2 save
pm2 startup
使用 Let’s Encrypt:
sudo yum install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
证书会自动续期。
| 组件 | 作用 |
|---|---|
| Node.js | 应用服务 |
| Nginx | 反向代理 / 静态资源 |
| PM2 | Node.js 进程管理 |
| HTTPS | 安全访问 |
如果你需要:
可以直接告诉我你的使用场景,我可以给你定制方案。