一、前置准备:安装Node.js 在CentOS上配置Node.js网络前,需先安装Node.js运行环境。推荐使用NodeSource仓库安装特定版本(如14.x),步骤如下:
# 导入NodeSource GPG密钥
curl -sL https://rpm.nodesource.com/setup_14.x | sudo bash -
# 安装Node.js及npm
sudo yum install -y nodejs
# 验证安装
node -v # 查看Node.js版本
npm -v # 查看npm版本
二、配置Node.js应用监听端口 Node.js应用的端口配置需修改代码或使用环境变量,确保应用能接收网络请求:
app.js)中,设置port变量为所需端口(如3000),并绑定到0.0.0.0(允许外部访问):const http = require('http');
const hostname = '0.0.0.0'; // 监听所有网络接口
const port = 3000; // 自定义端口
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.end('Hello World\n');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
process.env.PORT读取环境变量,提升灵活性(生产环境常用):const port = process.env.PORT || 3000; // 优先使用环境变量,未设置则用3000
server.listen(port, '0.0.0.0', () => {
console.log(`Server running on port ${port}`);
});
启动时指定端口:PORT=4000 node app.js。三、配置CentOS防火墙
CentOS默认使用firewalld管理防火墙,需允许应用端口通过:
# 允许指定端口(如3000)的TCP流量
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
# 重新加载防火墙配置
sudo firewall-cmd --reload
# 验证端口是否开放
sudo firewall-cmd --zone=public --query-port=3000/tcp # 返回yes表示开放
四、(可选)配置反向代理(推荐) 使用Nginx作为反向代理,可隐藏Node.js端口、处理静态资源、提升安全性。步骤如下:
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
/etc/nginx/conf.d/nodejs.conf(若目录不存在则创建),添加以下内容:server {
listen 80;
server_name yourdomain.com; # 替换为域名或公网IP
location / {
proxy_pass http://localhost:3000; # 转发到Node.js应用
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;
}
}
sudo systemctl reload nginx
五、(可选)SELinux配置(若启用) 若系统启用SELinux,需允许Node.js监听非标准端口(如3000):
# 允许Node.js监听TCP端口3000
sudo semanage port -a -t http_port_t -p tcp 3000
# 验证配置
sudo semanage port -l | grep http_port_t
六、验证网络访问
node app.js(或通过systemd服务启动)。curl http://localhost:3000,应返回Hello World。http://yourdomain.com(或公网IP),确认应用可访问。七、优化建议
/etc/systemd/system/nodejs.service文件,实现应用开机自启、自动重启:[Unit]
Description=Node.js Application
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/app.js
Restart=always
User=nginx # 建议使用专用用户
Group=nginx
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
启用并启动服务:sudo systemctl enable nodejs
sudo systemctl start nodejs