Amrish Patel
Amrish Patel

Reputation: 482

nginx proxy pass to external url

I have configured my nginx on amazon ec2 for the url www.example1.com . I need to proxy pass www.example1.com/blog to my blogging host www.example2.com/blog which is hosted on bluehost ( shred hosting ) without changing the url in browser. Is it possible ?

I tried many different combinations like

location /blog {
    proxy_pass http://www.example2.com;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

without any luck.

I could see in the log that nginx is trying to map to the IP instead of the domain which is the reason for the failure as shared hosting cannot recognize the ip but domain name.

Any input/help will be really appreciated.

Upvotes: 23

Views: 34078

Answers (1)

Hammer
Hammer

Reputation: 1582

The problem is because $http_host in proxy_set_header Host $http_host; uses the host in your original request header, but what you really need is the host for www.example2.com. $proxy_host will use the host in your proxy_pass directive. see Embedded Variables at the bottom http://nginx.org/en/docs/http/ngx_http_proxy_module.html

$proxy_host

name and port of a proxied server as specified in the proxy_pass directive;

And the reason it is not working for example1.com but www.example1.com I guess is because you didn't put the value example1.com in server_name directive.

Upvotes: 15

Related Questions