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
模块会自动分配请求到多个后端实例,提升整体吞吐量。