1. Node.js應用自身網絡配置
Node.js應用需明確監聽的IP地址和端口,以控制網絡訪問范圍。若要讓應用監聽所有網絡接口(允許外部訪問),可將IP設為0.0.0.0
;若僅限本地訪問,則用127.0.0.1
。例如:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => res.send('Hello World'));
app.listen(port, '0.0.0.0', () => console.log(`Server running at http://0.0.0.0:${port}/`));
此外,可通過環境變量(如process.env.PORT
)區分開發、測試、生產環境的端口配置,提升靈活性。
2. CentOS系統防火墻配置
CentOS默認使用firewalld
作為防火墻管理工具,需開放Node.js應用的端口(如3000、80、443)以允許外部流量。操作步驟如下:
firewalld
運行并設置開機自啟:sudo systemctl start firewalld
sudo systemctl enable firewalld
--permanent
表示永久生效):sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all # 查看public區域的開放端口
若需更嚴格的控制,可創建專門的nodejs
區域并將端口添加至該區域。
3. SELinux策略調整(若啟用)
若SELinux處于enforcing
模式(默認開啟),可能會阻止Node.js綁定到非特權端口(1024以下)或外部訪問。解決方法:
sudo setenforce 0
/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=permissive
,然后重啟系統。sudo semanage port -a -t http_port_t -p tcp 3000
此操作需安裝policycoreutils-python-utils
包(sudo yum install policycoreutils-python-utils
)。
4. 反向代理配置(生產環境推薦)
使用Nginx或Apache作為反向代理,可提升安全性(隱藏Node.js端口)、處理SSL加密、負載均衡及靜態文件服務。以Nginx為例:
sudo yum install 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
配置后,用戶通過http://yourdomain.com
訪問Node.js應用,無需暴露3000端口。
5. 端口與網絡接口綁定
sudo netstat -tulnp | grep :3000 # 檢查3000端口
若端口被占用,可修改Node.js應用的端口或停止占用服務。192.168.1.100
和外網eth0
),可將Node.js綁定到指定IP,限制訪問來源:app.listen(port, '192.168.1.100', () => console.log(`Server running at http://192.168.1.100:${port}/`));
此配置僅允許內網設備訪問。6. 系統服務化管理(可選但推薦)
將Node.js應用配置為systemd
服務,可實現開機自啟、進程守護(自動重啟崩潰的進程)。操作步驟:
/etc/systemd/system/nodejs.service
):[Unit]
Description=Node.js Application Service
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/app.js # 替換為應用路徑
Restart=always
User=nginx # 推薦使用非root用戶(如nginx、nodeuser)
Group=nginx
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
sudo systemctl enable nodejs
sudo systemctl start nodejs
sudo systemctl status nodejs
此方式提升了Node.js應用的穩定性和可管理性。