CentOS 上部署 Node.js 的网络配置注意事项
一 基础网络与服务可达性
- 明确监听地址与端口:生产环境建议绑定到0.0.0.0(而非 127.0.0.1),端口选择1024 以上的非特权端口,避免与系统服务冲突。
- 端口占用检查与释放:启动前用**netstat -tulnp | grep 或ss -ltnp | grep **确认端口未被占用。
- 作为系统服务运行:使用systemd管理进程,设置Restart=always、正确的User/Group与Environment(如 NODE_ENV=production),便于自动拉起与日志采集(journalctl -u nodejs.service)。
- 进程前台与调试:调试阶段可前台运行并输出日志;上线务必交由 systemd 托管,避免会话退出导致进程终止。
二 防火墙与安全组策略
- 使用firewalld放行必要流量:常见为80/443(HTTP/HTTPS),必要时放行应用端口(如 3000/8000/8443)。示例:firewall-cmd --permanent --zone=public --add-service=http --add-service=https;如需直放端口:firewall-cmd --permanent --add-port=3000/tcp;变更后执行 firewall-cmd --reload。
- 云服务器安全组:除系统防火墙外,还需在云平台安全组放行相同端口与来源网段(如仅内网或指定公网段)。
- 最小暴露面:仅开放必需端口与协议,避免使用iptables与 firewalld 规则冲突,保持策略清晰可审计。
三 反向代理与传输安全
- 推荐使用Nginx反向代理:处理静态资源、缓存、压缩与负载均衡,降低 Node.js 直接暴露面;同时便于统一TLS/HTTPS终止与证书管理。
- 代理头部透传:设置Host、X-Real-IP、X-Forwarded-For、X-Forwarded-Proto,确保应用获取真实客户端信息并正确生成协议与跳转。
- WebSocket 支持:在 Nginx 开启Upgrade与Connection头,保证长连接可用。
- TLS/HTTPS 与证书:优先使用Let’s Encrypt/Certbot为域名申请免费证书并自动续期,或在前端代理终止 TLS 后将明文流量转发至本地端口。
四 系统资源与内核网络参数
- 文件描述符限制:提升ulimit -n(如 65535),并在**/etc/security/limits.conf**中持久化(* soft/hard nofile 65535),避免“Too many open files”。
- 关键内核参数(/etc/sysctl.conf,执行 sysctl -p 生效):
- 连接队列与端口:net.core.somaxconn、net.ipv4.tcp_max_syn_backlog、net.ipv4.ip_local_port_range(如 1024 65535)
- 快速回收与超时:net.ipv4.tcp_tw_reuse=1、net.ipv4.tcp_fin_timeout=30
- 缓冲区与加速:net.core.rmem_max/wmem_max、net.ipv4.tcp_rmem/wmem、net.ipv4.tcp_fastopen=3
- 生效验证:sysctl -p 后检查ss -s、cat /proc/sys/net/core/somaxconn等确认参数已生效。
五 高并发与可观测性实践
- 多核利用:使用cluster模块或多实例 + Nginx 负载均衡提升并发与容错。
- 协议与压缩:启用HTTP/2与Gzip/Brotli压缩,减少连接开销与传输体积。
- 监控与日志:接入Prometheus + Grafana监控请求延迟、吞吐、错误率与进程资源;日志统一到journald或集中式方案(如 ELK),便于排障与审计。
- 变更与回滚:内核参数、Nginx 配置、systemd 单元与证书更新均应灰度变更并保留回滚路径,变更后做连通性与性能回归。