【发布时间】:2016-12-22 21:45:50
【问题描述】:
我有一个 nginx 服务器正在运行。我想向公司代理发出一些请求并将结果返回给客户端。
假设客户端向http://ip:port/redirect/google.com发出请求,服务器应该以请求的url作为参数向https://username:password@ip_proxy发出请求。
我发现了与我的问题相近的问题:
http://serverfault.com/questions/732063/nginx-proxy-pass-reverse-proxying-behind-corporate-firewall
和http://stackoverflow.com/questions/11865119/how-to-configure-nginx-behind-a-corporate-proxy
假设 205.100.100.100:80 是代理 URI,并且
XXVzYTQzMjXXXDpCb25qXXyMQ== 代理的凭据
有人说我们应该重写 url,然后将其传递给 proxy_pass 指令
location ^~ /redirect/ {
rewrite ^/redirect/(.*) https://google.com;
proxy_pass_header on;
proxy_set_header Proxy-Authorization "XXVzYTQzMjXXXDpCb25qXXyMQ==";
proxy_pass https://205.100.100.100:80;
}
我认为它没有按预期工作,因为它显示为重定向(http 代码 301)
另一个说我们应该使用 Host 标头并用它指定原始 url:
location ^~ /redirect/ {
proxy_pass_header on;
proxy_set_header Host "https://google.com";
proxy_set_header Proxy-Authorization "XXVzYTQzMXXXpCb25XXyMQ==";
proxy_pass https://205.100.100.100:80;
}
不起作用。他们还说代理读取指定为 url 参数的 url,例如:http://proxy:port/url_requested 所以:
location /redirect {
rewrite ^/redirect/(.*)"http://205.100.100.100:80/https://google.com" break;
proxy_pass_header on;
proxy_set_header Proxy-Authorization "XXVzYTQzMXXXpCb25XXyMQ==";
proxy_pass http://corporate-proxy.mycorp.com:8080;
}
应该有效吗?
如您所见,我不知道如何指定代理的用户名和密码。我尝试了带有"XXVzYTQzMjXXXDpCb25qXXyMQ==" 的Proxy-Authorization 标头,但没有结果。
我也尝试了 http_upstream 模块,没有结果。我不能使用proxy_pass http://user:pwd@205.100.100.100:80,因为 nginx 使用“:”来解析端口,它给我指定端口的错误。
我应该如何进行?
也许它来自整个配置或者我使用代理的方式?不知道。
【问题讨论】:
标签: nginx