2025-12-08
网络相关
00
请注意,本文编写于 86 天前,最后修改于 86 天前,其中某些信息可能已经过时。

目录

Nginx 动态代理访问子节点网页完整流程
一、环境准备
1. 打开配置文件
2. 添加代理配置
3. 保存并重启 Nginx
三、B 服务器访问方法
1. 直接通过浏览器访问
四、动态 IP 处理方案
1. 使用动态 DNS(DDNS)
五、注意事项

Nginx 动态代理访问子节点网页完整流程

一、环境准备

  1. 服务器要求

    • A 服务器(需安装 Nginx,且能访问 A1/A2/A3 子节点)
    • B 服务器(需能访问 A 服务器的 8080 端口)
    • 确保子节点(如 A1)的网页服务已启动(如 HTTP 80 端口)
  2. 软件安装

    • 在 A 服务器安装 Nginx:
      bash
      # Ubuntu/Debian sudo apt update && sudo apt install nginx # CentOS sudo yum install epel-release && sudo yum install nginx
  3. 防火墙设置

    • 放行 A 服务器的 8080 端口:
      bash
      # Ubuntu/Debian(UFW) sudo ufw allow 8080/tcp # CentOS(Firewalld) sudo firewall-cmd --add-port=8080/tcp --permanent sudo firewall-cmd --reload

二、A 服务器 Nginx 配置

1. 打开配置文件

bash
sudo nano /etc/nginx/nginx.conf

2. 添加代理配置

http 块中添加以下内容:

nginx
http { # 其他原有配置... server { listen 8080; # 监听端口,B 服务器将访问此端口 server_name _; # 允许所有域名访问 location /proxy { # 从 URL 参数获取子节点 IP 和端口 set $target_ip $arg_ip; set $target_port $arg_port; # 验证参数是否存在 if ($target_ip = "") { return 400 "Error: Please provide 'ip' parameter"; } if ($target_port = "") { set $target_port 80; # 默认端口为 80 } # 反向代理到目标子节点 proxy_pass http://$target_ip:$target_port; # 保留原始请求头 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }

3. 保存并重启 Nginx

bash
sudo systemctl restart nginx

三、B 服务器访问方法

1. 直接通过浏览器访问

在 B 服务器的浏览器中输入:

http://A服务器IP:8080/proxy?ip=子节点IP&port=子节点端口
  • 示例:访问 A1 的 80 端口网页:
    http://192.168.1.100:8080/proxy?ip=192.168.1.101&port=80

2. 使用 curl 命令验证

bash
curl "http://A服务器IP:8080/proxy?ip=192.168.1.101&port=80"

四、动态 IP 处理方案

1. 使用动态 DNS(DDNS)

如果子节点(如 A1)的 IP 经常变化,建议搭配 DDNS 服务:

  1. 为子节点申请一个固定域名(如 a1.mydomain.com
  2. 在子节点安装 DDNS 客户端,自动更新 IP 到域名
  3. 修改 Nginx 配置中的 $target_ip 为域名:
    nginx
    proxy_pass http://$arg_ip:$target_port; # 直接使用 URL 中的域名参数

2. 动态参数传递

每次访问时直接传递最新 IP:

http://A服务器IP:8080/proxy?ip=192.168.1.102&port=80 # 假设 A1 的新 IP 是 192.168.1.102

五、注意事项

  1. HTTPS 支持

    • 如果子节点使用 HTTPS(443 端口),修改 Nginx 配置为:
      nginx
      proxy_pass https://$target_ip:$target_port;
    • 需在 A 服务器安装 SSL 证书(如 Let's Encrypt)
  2. 端口冲突

    • 确保 A 服务器的 8080 端口未被其他服务占用
  3. 安全加固

    • 限制仅允许 B 服务器访问 A 的 8080 端口:
      nginx
      allow 192.168.1.200; # B 服务器的 IP deny all;

六、常见问题处理

  1. 404 错误

    • 检查 Nginx 配置是否正确,特别是 location /proxy 的路径
  2. 502 Bad Gateway

    • 确认子节点 IP 和端口是否可达
    • 检查子节点的网页服务是否正常运行
  3. 跨域问题

    • 在 Nginx 配置中添加跨域头:
      nginx
      add_header Access-Control-Allow-Origin *;

如果需要 B 服务器代理 B1/B2/B3,只需在 B 服务器重复上述配置,A 服务器通过 B 的 8080 端口访问即可。

本文作者:sea-whales

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!