Nginx how to proxy_pass to a proxy

nginx

I have a nginx server running. I want to issue some request to a corporate proxy and return the result to the client.

Let us say the client issues a request to http://ip:port/redirect/google.com, the server should issue the request to https://username:password@ip_proxy with the requested url as parameter.

I have found questions that are close to my problem:

http://serverfault.com/questions/732063/nginx-proxy-pass-reverse-proxying-behind-corporate-firewall
and
http://stackoverflow.com/questions/11865119/how-to-configure-nginx-behind-a-corporate-proxy

assume 205.100.100.100:80 is the proxy URI and
XXVzYTQzMjXXXDpCb25qXXyMQ== the credential for the proxy

one says we should rewrite the url and then pass it to proxy_pass directive

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;
}

I think it does not work as intended cause it is showing as a redirection (http code 301)

Another one says that we should use the Host header and specify original url with it:

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;
}

Doesn't work. They also say that a proxy read the url specified as an url parameter something like: http://proxy:port/url_requested so:

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; 
}

Should work ?

As you can see I do not know how to specify the username, password to the proxy. I tried a Proxy-Authorization header with "XXVzYTQzMjXXXDpCb25qXXyMQ==" with no result.

I tried the http_upstream module too, no result. I cannot use proxy_pass http://user:pwd@205.100.100.100:80 because nginx use ":" for parsing the port, it gives me error specifying port.

How should I proceed ?

Maybe it comes from the entire configuration or they way I use the proxy? Don't know.

Best Answer

This isn't possible, nginx isn't able to talk to forward proxy.

See also this thread in the official mailing list: http://mailman.nginx.org/pipermail/nginx-devel/2013-March/003534.html

Related Topic