域名、Nginx 与应用端口,分别负责什么?
网站打不开时,先区分“没有找到服务器”和“服务器上的应用没有响应”。两类问题的检查方向不同。
1. DNS 负责找到地址
域名是便于记忆的名称。A 记录通常指向 IPv4 地址,AAAA 记录指向 IPv6 地址。DNS 不负责启动应用,也不负责决定应用监听哪个端口。解析记录修改后,不同网络上的缓存更新可能不同步。
2. 反向代理负责转交请求
Nginx 可以接收浏览器请求,再把请求转交给本机的 Node.js 应用。这样可以由 Nginx 集中处理 HTTPS 证书和静态资源,而应用只监听本地端口。
浏览器
→ DNS 查询服务器地址
→ Nginx 接收 HTTP / HTTPS 请求
→ 本机 127.0.0.1:3000 上的应用
→ 响应沿原路径返回3. 一个简化的代理配置
下面仅说明 HTTP 代理关系,使用的是示例域名。它不包含证书、安全加固或 WebSocket 配置,不能直接当作完整的生产配置。
server {
listen 80;
server_name notes.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;
}
}修改配置后应先检查语法,再重新加载配置。不要直接覆盖正在使用的配置文件,也不要因为代理失败就开放所有应用端口。
4. 从里往外排查
- 应用:确认进程在运行,本机访问应用端口能得到预期响应。
- 代理:确认配置中的应用地址、端口和域名匹配,查看相关错误日志。
- 网络:检查服务器防火墙和云平台入站规则是否允许所需访问。
- 解析:检查域名是否指向正确地址,留意遗留的 IPv6 记录。
- HTTPS:检查证书覆盖的域名和有效期,不用关闭证书校验来掩盖问题。
5. 静态网站不一定需要应用进程
只有 HTML、CSS 和图片的笔记站可以直接由 Nginx 提供文件,不必额外启动 Node.js。是否需要应用服务,取决于有没有必须在服务端执行的功能,而不是网站用了什么主题。