综合 Node.js 官方文档、Nginx 官方文档以及主流云服务商的最佳实践,Node.js 服务绑定域名的基本原理是:DNS 解析把域名指向服务器公网 IP,再由服务器上的Web 服务识别域名并将请求交给 Node.js 应用。生产环境中,最专业可靠的方式是使用 Nginx 作为反向代理,而不是在 Node.js 代码中强行处理域名。

一、前置准备
你需要准备一个已注册的域名、一台具有公网 IP 的 Linux 云服务器,并在云控制台的安全组 / 防火墙中放行 80 和 443 端口。如果服务器位于中国大陆,域名还需要完成ICP 备案,否则无法正常使用 80/443 端口建站。
二、配置 DNS 解析,将域名指向服务器 IP
登录你的域名 DNS 服务商,例如阿里云、腾讯云、Cloudflare 等,添加以下解析记录:主机记录为 @ 的 A 记录指向服务器 IPv4 地址;主机记录为 www 的 A 记录也指向同一个 IP。如果支持 IPv6,还需要添加 AAAA 记录。解析生效后,可以使用 ping、dig 或 nslookup 检查域名是否已经正确解析到目标服务器。
三、让 Node.js 服务监听本地端口
生产环境推荐让 Node.js 只监听 127.0.0.1 上的某个端口,比如 3000 端口。这一层不要让 Node.js 直接占用 80/443 端口,因为后续需要由 Nginx 对外处理 HTTP/HTTPS 请求。Node.js 示例代码如下:
const http = require('http');
const server = http.createServer((req, res) => { res.end('Hello Node'); });
server.listen(3000, '127.0.0.1', () => console.log('listening on 127.0.0.1:3000'));
如果使用 Express,则可以写成 app.listen(3000, '127.0.0.1')。这样 Node.js 服务就不会直接暴露到公网,而是只接受来自本机反向代理的请求。
四、配置 Nginx 反向代理绑定域名
安装 Nginx 后,在 /etc/nginx/conf.d/ 目录下创建域名配置文件。例如 example.com.conf,核心配置内容如下:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}
这段配置的作用是:Nginx 监听 80 端口,当请求的 Host 头为 example.com 或 www.example.com 时,Nginx 会将请求反向代理到本机的 127.0.0.1:3000,也就是 Node.js 服务。执行 nginx -t 校验语法,再执行 nginx -s reload 或 systemctl reload nginx 使配置生效。此时访问 http://example.com 即可看到 Node.js 的响应内容。
五、配置 HTTPS 和 SSL 证书
生产环境必须启用 HTTPS。推荐使用 Let's Encrypt 的 Certbot 工具自动申请并配置 SSL 证书。安装 Certbot 后执行:
certbot --nginx -d example.com -d www.example.com
Certbot 会自动修改 Nginx 配置,添加 SSL 证书路径并开启 443 端口监听。如果使用阿里云或腾讯云的免费证书,也可以手动下载证书,并将证书路径写到 Nginx 的 ssl_certificate 和 ssl_certificate_key 指令中。
六、使用 PM2 守护 Node.js 进程
Node.js 服务需要通过进程管理工具保证长期稳定运行。推荐使用 PM2,启动命令为:
pm2 start app.js --name my-node-app
pm2 save
pm2 startup
其中 pm2 startup 会生成系统服务,这样服务器重启后 Node.js 进程也会自动启动,避免服务意外下线。
七、如果直接用 Node.js 监听 80 端口可以吗
从技术上可行,但不推荐。直接让 Node.js 监听 0.0.0.0:80 后,所有解析到该 IP 的域名都会请求到同一个 Node.js 服务,虽然可以访问,但无法根据域名区分多个站点,也不方便配置 HTTPS、静态缓存、负载均衡和安全防护。而且 80 端口需要 root 权限,长期运行存在风险。因此,Node 服务绑定域名的标准生产方案是“域名解析 + Nginx 反向代理 + Node.js 本地端口监听”。
八、特殊场景:WebSocket 和真实客户端 IP
如果 Node.js 服务使用了 WebSocket,Nginx 配置中还需要加入以下请求头:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
当 Node.js 使用 Nginx 反向代理后,应用获取到的客户端 IP 默认是 127.0.0.1。为了让 req.ip 返回真实用户 IP,在 Express 中需要设置 app.set('trust proxy', true),并且通过 Nginx 的 X-Forwarded-For 请求头传递真实 IP。
九、常见问题排查
如果域名绑定后无法访问,请依次检查:DNS 解析是否生效;云安全组是否放行 80/443;系统防火墙如 ufw 或 firewalld 是否放行端口;Nginx 的 server_name 是否与域名完全匹配;Node.js 是否确实在 127.0.0.1:3000 端口监听。可以使用命令 curl -H "Host: example.com" 127.0.0.1 在服务器本机测试 Nginx 配置是否正确。
总结
Node 服务绑定域名的完整生产流程是:域名 A 记录指向公网 IP + Nginx 监听 80/443 + server_name 匹配域名 + proxy_pass 反向代理到 Node.js 本地端口 + HTTPS 证书 + PM2 进程守护。这套方案符合行业标准实践,具备稳定性、可扩展性和安全性。

查看详情

查看详情