开发实践笔记
← 全部笔记
网站部署

域名、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. 从里往外排查

  1. 应用:确认进程在运行,本机访问应用端口能得到预期响应。
  2. 代理:确认配置中的应用地址、端口和域名匹配,查看相关错误日志。
  3. 网络:检查服务器防火墙和云平台入站规则是否允许所需访问。
  4. 解析:检查域名是否指向正确地址,留意遗留的 IPv6 记录。
  5. HTTPS:检查证书覆盖的域名和有效期,不用关闭证书校验来掩盖问题。

5. 静态网站不一定需要应用进程

只有 HTML、CSS 和图片的笔记站可以直接由 Nginx 提供文件,不必额外启动 Node.js。是否需要应用服务,取决于有没有必须在服务端执行的功能,而不是网站用了什么主题。

继续阅读:修改网站前的备份与恢复