需求:某Nginx需要通过一个http代理服务来访问目标URL。
如果下图所示:
服务器B仅提供一个代理出来,不允许在该服务器上安装和进行任何其他配置操作。
在这种需求场景下,网络请求过程和域名解析的工作流程大致如下:
1、客户端发送请求到Nginx服务器。
2、Nginx服务器根据配置,将请求转发给代理服务器(例如:222.10.20.5:7890)。
3、代理服务器接收到请求后,负责解析目标域名(如:https://www.google.com/js/th/YjCNJ0mFj9HiCkQt39lQVpZzkP0G8dlYH-ABayRLdFs.js
)到具体的IP地址。
4、代理服务器进一步将请求转发到解析后的实际IP地址,即最终的目标服务器。
5、最终服务器处理请求并返回响应给代理服务器,代理服务器再将响应返回给Nginx,最后Nginx将响应返回给客户端。
Nginx 配置文件的代码示例片段如下:
location /js/th/ {
proxy_pass http://222.10.20.5:7890; #这里配置代理服务, http还是https具体要取决于代理服务
proxy_set_header Host www.google.com; #这里配置目标URL的host
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_ssl_server_name on; #如果目标是HTTPS站点,需要开启此配置
}
假设我们的 nginx 服务的地址是 http://192.168.10.222:8080,此时我们访问 http://192.168.10.222:8080/js/th/YjCNJ0mFj9HiCkQt39lQVpZzkP0G8dlYH-ABayRLdFs.js
即可看到实际地址 https://www.google.com/js/th/YjCNJ0mFj9HiCkQt39lQVpZzkP0G8dlYH-ABayRLdFs.js
的返回结果,则验证通过。
(END)