CentOS中Node.js網絡配置技巧
Node.js應用需明確監聽的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}/`));
若需綁定到特定內網IP(如192.168.1.100
),只需替換地址即可:
app.listen(port, '192.168.1.100', () => console.log(`Server running at http://192.168.1.100:${port}/`));
CentOS默認使用firewalld
管理防火墻,需開放Node.js應用的端口(如3000
)以允許外部訪問。操作步驟如下:
# 永久添加端口(以3000為例)
sudo firewall-cmd --permanent --zone=public --add-port=3000/tcp
# 重新加載防火墻配置使更改生效
sudo firewall-cmd --reload
驗證端口是否開放:
sudo firewall-cmd --zone=public --query-port=3000/tcp # 返回yes表示開放
若系統啟用SELinux,可能會阻止Node.js綁定到非標準端口(如3000
)??赏ㄟ^以下命令臨時允許:
sudo setenforce 0 # 臨時設置為寬容模式(重啟后失效)
如需永久允許,可調整SELinux布爾值:
sudo setsebool -P httpd_can_network_connect 1 # 允許HTTP服務網絡連接
若仍無法解決,可創建自定義SELinux策略模塊(需根據具體錯誤信息調整)。
Node.js處理高并發時需大量文件描述符,需增加系統限制。臨時設置(當前終端有效):
ulimit -n 65535
永久設置(對所有用戶生效):編輯/etc/security/limits.conf
,添加以下內容:
* soft nofile 65535
* hard nofile 65535
其中*
表示所有用戶,soft
為軟限制(可臨時超過),hard
為硬限制(最大值)。
編輯/etc/sysctl.conf
,添加以下參數以提升網絡性能:
# 增加TCP連接隊列大小
net.core.somaxconn = 65535
# 增加SYN隊列大小,減少SYN flood攻擊影響
net.ipv4.tcp_max_syn_backlog = 65535
# 擴大可用端口范圍
net.ipv4.ip_local_port_range = 1024 65535
# 啟用TIME-WAIT端口復用,減少端口耗盡
net.ipv4.tcp_tw_reuse = 1
# 縮短TIME-WAIT狀態超時時間(秒)
net.ipv4.tcp_fin_timeout = 30
保存后執行sysctl -p
使配置生效。
反向代理可提升性能(如緩存靜態文件)、增強安全性(隱藏Node.js端口)及實現負載均衡。安裝Nginx:
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
配置反向代理(編輯/etc/nginx/conf.d/nodejs.conf
):
server {
listen 80;
server_name your_domain.com; # 替換為域名或IP
location / {
proxy_pass http://localhost:3000; # 轉發到Node.js應用
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;
}
# 可選:緩存靜態文件,減輕Node.js壓力
location /static/ {
alias /path/to/static/files/;
expires 30d; # 緩存30天
}
}
重新加載Nginx配置:
sudo systemctl reload nginx
若需處理高并發,可使用Nginx實現多Node.js實例負載均衡。首先啟動多個Node.js進程(如使用cluster
模塊),再配置Nginx:
upstream nodejs_backend {
server 127.0.0.1:3000;
server 127.0.0.1:3001;
server 127.0.0.1:3002;
}
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://nodejs_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
upstream
模塊會自動分配請求到多個后端實例,提升整體吞吐量。