Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

nginx how to proxy_pass to a proxy

Tags:

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:[email protected]: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.

like image 423
Paltoquet Avatar asked Aug 16 '16 13:08

Paltoquet


People also ask

How do I forward a proxy in NGINX?

The following steps briefly outlines the process. 1) The client sends an HTTP CONNECT request to the proxy server. 2) The proxy server uses the host and port information in the HTTP CONNECT request to establish a TCP connection with the target server. 3) The proxy server returns an HTTP 200 response to the client.

How do I setup a reverse proxy?

Add a reverse proxy rule with the server name: localhost:1111 (replace with the real location and port of your Hub service). Open the rule, check the rewrite URL, and add the following server variables: Set the HTTP_X_FORWARDED_HOST variable to {HTTP_HOST} .

What is NGINX reverse proxy?

A reverse proxy server is a type of proxy server that typically sits behind the firewall in a private network and directs client requests to the appropriate backend server. A reverse proxy provides an additional level of abstraction and control to ensure the smooth flow of network traffic between clients and servers.


1 Answers

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

like image 188
VBart Avatar answered Oct 22 '22 02:10

VBart