基于 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 / { # ... 其他配置 ... }}配置完成后的工作流程
- 客户端请求: 客户端访问
site-a.com。 - 香港 Nginx 接收: 香港 Nginx 收到请求,它查看
Host头部是site-a.com。 - 匹配配置: 香港 Nginx 匹配到
server_name site-a.com这个块。 - 转发: 它将请求转发给
<原服务器IP>:80,并且在转发时设置了Host: site-a.com。 - 原服务器接收: 原服务器的 Nginx 接收到到来自香港服务器的请求,根据
set_real_ip_from检查请求是否来自受信任的 IP(您的香港 IP)。 - 如果检查通过,它将从
X-Forwarded-For头部中提取客户端的真实 IP 地址。 - 在 Nginx 访问日志 (
access.log) 中,客户端 IP 字段将显示为真实的客户端 IP,而不是您的香港服务器 IP。您的 Web 应用获取到的 IP 也将是真实的客户端 IP。 - 原服务器匹配: 原服务器根据收到的
Host: site-a.com头部,将其路由到正确的虚拟主机配置(即site-a.com的 Web 应用)。
现在,整个加速链条就完整了:
客户端 IP (真实) → 香港服务器 (Nginx 反代) → 原服务器 (Nginx RealIP 模块)
评论 (0)