【问题标题】:nginx proxy pass to external urlnginx 代理传递到外部 url
【发布时间】:2016-11-15 15:51:36
【问题描述】:

我已经在亚马逊 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 但域名。

我们将不胜感激任何输入/帮助。

【问题讨论】:

  • 尝试将proxy_set_header Host $http_host;更改为proxy_set_header Host $proxy_host;
  • 非常感谢!它完美地工作!我不确定是否允许我提出与此相关的另一个问题。当我写 http://example1.com 时它不会重定向,但是它会被重定向到 http://www.example1.com 和 www.example1.com。如果不允许我这样做,我深表歉意。

标签: nginx reverse-proxy


【解决方案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 指令中。

【讨论】:

  • 感谢您的详细解答。我尝试在服务器中编写 example1.com,例如 server_name example1.com www.example1.com;但是,www.example1.com 从 www.example2.com 获取内容。但是,http://example1.com 仍然提供原始内容。
  • @AmrishPatel 粘贴整个服务器块
  • @AmrishPatel :: 这个问题解决了吗?我有类似的问题stackoverflow.com/questions/52391068/…
  • @Lution 就像return(重定向)一样,我的意思是在这个过程中url发生了变化,有没有办法在不改变url的情况下代理到另一个链接?
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 2014-05-10
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 2015-12-27
相关资源
最近更新 更多