我有一个nginx服务器在运行。我想向公司代理发出一些请求,并将结果返回给客户端。
假设客户端向http://ip:port/redirect/google.com发出请求,服务器应向https://username:password@ip_proxy发出请求,并将所请求的url作为参数。
我发现了与我的问题相近的问题:
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使用":“来解析端口,它给我指定端口时出错。
我应该如何继续?
也许它来自整个配置,或者他们使用代理的方式?我也不知道。
发布于 2016-08-16 22:27:01
这是不可能的,nginx无法与转发代理通信。
另请参阅官方邮件列表中的此帖子:http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003534.html
https://stackoverflow.com/questions/38976224
复制相似问题