基于 AI 仅供参考。

将您的域名解析(A记录)指向香港服务器的 IP 地址

香港服务器

# 站点 A 的 HTTPS 配置server {    listen 443 ssl http2;    server_name site-a.com;    # 引用 site-a 的证书文件    ssl_certificate /etc/nginx/ssl/site-a/fullchain.pem;    ssl_certificate_key /etc/nginx/ssl/site-a/privkey.key;    # 可选:将所有 HTTP (80) 流量重定向到 HTTPS (443)    if ($scheme != "https") {        return 301 https://$host$request_uri;    }      location / {        # 转发到原服务器的 HTTP 端口(此时数据已经解密,无需再加密)        proxy_pass http://<原服务器IP>:80;                 # 关键:传递真实客户端 IP        # X-Forwarded-For:传递完整的客户端 IP 链        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        # X-Real-IP:传递最近一次连接的客户端 IP        proxy_set_header X-Real-IP $remote_addr;            # 传递其他重要的 Host 信息        # 确保原服务器知道客户端请求的是哪个域名        proxy_set_header Host $host;        # 关键:告诉原服务器,最初请求是 HTTPS        proxy_set_header X-Forwarded-Proto https;            # 其他标准头部(推荐)        proxy_set_header X-Forwarded-Proto $scheme;        # 建议关闭 Nginx 的压缩,由原服务器或应用处理        proxy_set_header Accept-Encoding "";                 # 优化转发性能的设置        proxy_connect_timeout 60s;        proxy_send_timeout 60s;        proxy_read_timeout 60s;       }}# 站点 B 的 HTTPS 配置server {    listen 443 ssl http2;    server_name site-b.com;    # 引用 site-b 的证书文件    ssl_certificate /etc/nginx/ssl/site-b/fullchain.pem;    ssl_certificate_key /etc/nginx/ssl/site-b/privkey.key;    # ... 其他 SSL 参数配置 ...    location / {        # 转发到原服务器的 HTTP 端口        proxy_pass http://<原服务器IP>:80;         # ... 其他配置 ...    }}

原服务器 Nginx

server {    listen 80;    server_name site-a.com;    # 您的香港反向代理服务器的 IP 地址    # Nginx 将信任此 IP 发送过来的 X-Forwarded-For 或 X-Real-IP    # 如果请求不是来自这个 IP,Nginx 将忽略 real_ip_header,防止恶意用户伪造 IP 头部。    set_real_ip_from <香港服务器的实际公网 IP>;    # Nginx 应该从哪个 HTTP 头部获取真实 IP    # 推荐使用 X-Forwarded-For,因为它支持多级代理(虽然您目前是单级代理)    # 在您香港服务器的 Nginx 反代配置中,您设置了     #    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    # 因此原服务器应该读取 X-Forwarded-For    real_ip_header X-Forwarded-For;     # 可选:如果您的代理链中存在其他代理,并且您希望 Nginx 递归查找最原始的 IP,请使用此项。    # 对于单级代理,通常不需要设置或设置为 off。    # real_ip_recursive on;    location / {        # ... 其他配置 ...    }}server {    listen 80;    server_name site-b.com;    set_real_ip_from <香港服务器的实际公网 IP>;    real_ip_header X-Forwarded-For;     real_ip_recursive on;    location / {        # ... 其他配置 ...    }}

配置完成后的工作流程

  1. 客户端请求: 客户端访问 site-a.com
  2. 香港 Nginx 接收: 香港 Nginx 收到请求,它查看 Host 头部是 site-a.com
  3. 匹配配置: 香港 Nginx 匹配到 server_name site-a.com 这个块。
  4. 转发: 它将请求转发给 <原服务器IP>:80,并且在转发时设置了 Host: site-a.com
  5. 原服务器接收: 原服务器的 Nginx 接收到到来自香港服务器的请求,根据 set_real_ip_from 检查请求是否来自受信任的 IP(您的香港 IP)。
  6. 如果检查通过,它将从 X-Forwarded-For 头部中提取客户端的真实 IP 地址。
  7. 在 Nginx 访问日志 (access.log) 中,客户端 IP 字段将显示为真实的客户端 IP,而不是您的香港服务器 IP。您的 Web 应用获取到的 IP 也将是真实的客户端 IP。
  8. 原服务器匹配: 原服务器根据收到的 Host: site-a.com 头部,将其路由到正确的虚拟主机配置(即 site-a.com 的 Web 应用)。

现在,整个加速链条就完整了:

客户端 IP (真实) → 香港服务器 (Nginx 反代) → 原服务器 (Nginx RealIP 模块)