nginx代理传递给外部URL

时间:2016-07-13 07:28:38

标签: nginx reverse-proxy

我已经在亚马逊ec2上为我的网址www.example1.com配置了我的nginx。我需要代理将www.example1.com/blog传递给我的博客主机www.example2.com/blog,该主机托管在bluehost(碎片托管)上而不更改浏览器中的URL。有可能吗?

我尝试了很多不同的组合,比如

     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;

}

没有任何运气。

我可以在日志中看到nginx正在尝试映射到IP而不是域,这是失败的原因,因为共享主机无法识别ip而是域名。

非常感谢任何输入/帮助。

1 个答案:

答案 0 :(得分:1)

我会在这里给出答案。

您遇到的问题是因为proxy_set_header Host $http_host;中的$ http_host使用原始请求标头中的主机,但您真正需要的是www.example2.com的主机。 $ proxy_host将在proxy_pass指令中使用主机。请参阅底部的嵌入式变量 http://nginx.org/en/docs/http/ngx_http_proxy_module.html

  

$ proxy_host使用

     

proxy_pass指令中指定的代理服务器的名称和端口;

它不适用于example1.comwww.example1.com的原因我想是因为您没有将值example1.com放在server_name指令中。