在配置网络前,需先安装Node.js及npm(Node包管理器)。推荐通过NodeSource存储库安装特定版本(如14.x),避免系统默认版本过旧:
# 导入NodeSource GPG密钥并设置存储库
curl -sL https://rpm.nodesource.com/setup_14.x | sudo -E bash -
# 安装Node.js及npm
sudo yum install -y nodejs
# 验证安装
node -v # 查看Node.js版本
npm -v # 查看npm版本
若需为服务器分配固定IP,编辑网络配置文件(如ifcfg-ens33,路径/etc/sysconfig/network-scripts/):
DEVICE=ens33 # 网卡名称(通过`ip a`命令查看)
BOOTPROTO=static # 改为静态IP
IPADDR=192.168.1.100 # 静态IP地址
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.1.1 # 网关地址
DNS1=8.8.8.8 # DNS服务器
DNS2=8.8.4.4
ONBOOT=yes # 开机自启
修改后重启网络服务:
# CentOS 7(使用network服务)
sudo systemctl restart network
# CentOS 8及以上(使用NetworkManager)
sudo nmcli connection down ens33 && sudo nmcli connection up ens33
在Node.js代码中,通过app.listen()指定监听的IP和端口。若需允许外部访问,必须将IP设为0.0.0.0(监听所有网络接口):
const express = require('express');
const app = express();
const port = 3000; // 自定义端口(如8080、3000等)
app.get('/', (req, res) => {
res.send('Hello World from Node.js on CentOS!');
});
// 监听所有网络接口的指定端口
app.listen(port, '0.0.0.0', () => {
console.log(`Server is running at http://0.0.0.0:${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表示成功
若需开放HTTP(80)/HTTPS(443)服务(如反向代理场景),可直接添加服务:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
若系统启用了SELinux(默认开启),可能会阻止Node.js应用接受外部连接。可通过以下步骤调整:
sudo setenforce 0 # 关闭SELinux(重启后恢复)
若应用能正常访问,说明是SELinux导致的问题,需进一步配置永久策略。
允许Node.js应用监听指定端口(如3000):
# 安装policycoreutils-python-utils(用于semanage)
sudo yum install -y policycoreutils-python-utils
# 将端口添加到http_port_t类型(允许Web服务使用)
sudo semanage port -a -t http_port_t -p tcp 3000
# 验证端口是否添加成功
sudo semanage port -l | grep http_port_t
为提升安全性、支持SSL加密及负载均衡,建议使用Nginx作为反向代理。
sudo yum install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx # 开机自启
编辑Nginx配置文件(如/etc/nginx/conf.d/nodejs.conf),添加以下内容:
server {
listen 80; # 监听80端口(HTTP)
server_name yourdomain.com; # 替换为你的域名或公网IP
location / {
proxy_pass http://localhost:3000; # 转发到Node.js应用(监听3000端口)
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;
}
}
保存后重新加载Nginx:
sudo systemctl reload nginx
若需通过域名访问,需在DNS提供商处添加A记录,将域名指向服务器公网IP。
检查Node.js应用是否运行:
curl http://localhost:3000 # 本地访问
若返回Hello World,说明应用正常运行。
检查防火墙是否允许流量:
curl http://<服务器公网IP>:3000 # 外部访问
若返回正常响应,说明防火墙配置正确。
检查反向代理是否生效:
若配置了Nginx,通过域名访问(如http://yourdomain.com),应显示Node.js应用的响应。
通过以上步骤,即可在CentOS上完成Node.js的网络配置,使其能够通过IP或域名对外提供服务。根据实际需求,可进一步优化配置(如SSL加密、负载均衡等)。