我已经在亚马逊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而是域名。
非常感谢任何输入/帮助。
答案 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.com
而www.example1.com
的原因我想是因为您没有将值example1.com
放在server_name
指令中。