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.
A simple example A proxy_pass is usually used when there is an nginx instance that handles many things, and delegates some of those requests to other servers. Some examples are ingress in a Kubernetes cluster that spreads requests among the different microservices that are responsible for the specific locations.
You can circumvent nginx's requirement for all hosts to be available at startup by using variables inside the proxy_pass directives. HOWEVER, for some unfathomable reason, if you do so, you require a dedicated resolver directive to resolve these paths. For Kubernetes, you can use kube-dns. kube-system here.
A simple example. A proxy_pass is usually used when there is an nginx instance that handles many things, and delegates some of those requests to other servers. Some examples are ingress in a Kubernetes cluster that spreads requests among the different microservices that are responsible for the specific locations.
My current setup is one single site, lets call that http://production.com, that's being served by Nginx on port 80 as a static cache and Apache in the background on port 8080 localhost, nothing fancy really and this works very well.
I'll give my answer here.
The problem you meet 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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With