如何将Node+Express服务器绑定到域名(无需指定端口)
解决无需端口访问Express应用的方法
方法一:用Nginx做反向代理(推荐生产环境使用)
这是最稳妥的方案,既能保证应用安全,又能避免端口冲突:
- 安装Nginx
- 如果你用Ubuntu/Debian,执行命令:
sudo apt update && sudo apt install nginx - 如果你用CentOS/RHEL,执行命令:
sudo yum install nginx
- 如果你用Ubuntu/Debian,执行命令:
- 配置反向代理规则
- 创建并编辑站点配置文件:
sudo nano /etc/nginx/sites-available/mysite.com - 粘贴以下配置(把
mysite.com换成你的实际域名):server { listen 80; server_name mysite.com www.mysite.com; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
- 创建并编辑站点配置文件:
- 启用配置并重启Nginx
- 把配置文件链接到启用目录:
sudo ln -s /etc/nginx/sites-available/mysite.com /etc/nginx/sites-enabled/ - 检查配置是否合法:
sudo nginx -t - 重启Nginx生效:
sudo systemctl restart nginx
- 把配置文件链接到启用目录:
- 开放80端口防火墙
- Ubuntu/Debian:
sudo ufw allow 80 - CentOS/RHEL:
sudo firewall-cmd --add-service=http --permanent && sudo firewall-cmd --reload
- Ubuntu/Debian:
完成后,访问http://www.mysite.com就会自动转发到你运行在3000端口的Express应用。
方法二:让Express直接监听80端口(快速测试用,不推荐生产环境)
这种方法不用额外装软件,但需要root权限,且容易和其他服务冲突:
- 修改你的Express代码,把监听端口改成80:
app.listen(80, () => { console.log('服务器运行在80端口'); }); - 用root权限启动应用:
sudo node app.js
重要提醒
DNS解析本身不支持带端口的A记录,所以你之前在Godaddy尝试设置111.11.11.11:3000是无效的,正常只需要把A记录指向你的VPS纯IP即可。
内容的提问来源于stack exchange,提问作者Javier Ortega
相关产品推荐
相关产品推荐

