【问题标题】:How do I preserve a host header in the browser's url after a 301 redirect?301重定向后如何在浏览器的url中保留主机头?
【发布时间】:2018-12-14 03:41:02
【问题描述】:

我的任务是使内部 URL (coolnewproduct.mycoolcorp.net) 重定向到外部实体 (mycoolcorp.coolerproducts.com)。我使用 nginx 为 coolnewproduct.mycoolcorp.net 执行 301 重定向到 mycoolcorp.coolerproducts.com 但是浏览器中可见的主机标头发生了变化,并且看到了 mycoolcorp.coolerproducts.com。 nginx有没有办法在执行重定向后保留原始的coolnewproduct.mycoolcorp.net主机头?

【问题讨论】:

  • 看来您需要透明代理,而不是重定向。您可以将您当前的 nginx 配置包含在您的问题中吗?网站mycoolcorp.coolerproducts.com 是否使用 cookie?
  • ``` 服务器 { 听 80;服务器名称coolnewproduct.mycoolcorp.net;根 /var/www/html; index index.html index.htm index.nginx-debian.html;位置 / { proxy_pass mycoolcorp.coolerproducts.com; proxy_set_header 主机 $proxy_host; } ```

标签: nginx proxy http-status-code-301 nginx-config hostheaders


【解决方案1】:

试试这个:

server {
    listen 80;
    server_name coolnewproduct.mycoolcorp.net;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    location / {
        proxy_set_header Host mycoolcorp.coolerproducts.com;
        proxy_cookie_domain mycoolcorp.coolerproducts.com coolnewproduct.mycoolcorp.net;
        proxy_pass http://mycoolcorp.coolerproducts.com;
    }
}

如果站点 mycoolcorp.coolerproducts.com 使用从 HTTP 到 HTTPS 的自动重定向,请将行 proxy_pass http://mycoolcorp.coolerproducts.com; 更改为 proxy_pass https://mycoolcorp.coolerproducts.com;

更新

假设 nginx 使用 ngx_http_sub_module 编译,要在代理站点请求正文中重写绝对链接,您可以尝试使用此配置:

server {
    listen 80;
    server_name coolnewproduct.mycoolcorp.net;
    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;
    location / {
        sub_filter_once off;
        sub_filter '//mycoolcorp.coolerproducts.com/' '//coolnewproduct.mycoolcorp.net/';
        proxy_set_header Host mycoolcorp.coolerproducts.com;
        proxy_set_header Accept-Encoding "";
        proxy_cookie_domain mycoolcorp.coolerproducts.com coolnewproduct.mycoolcorp.net;
        proxy_pass http://mycoolcorp.coolerproducts.com;
    }
}

我从未使用过这个模块,有人说它每页只替换一次。有一个来自我们中国朋友的alternative 确认为这个案例工作(也从未使用过)。

【讨论】:

  • 这有效并且确实重定向到新站点,但是我试图保留我传入的原始 http 标头......如果可能的话。
  • @VladBekker 你确定你的浏览器没有缓存你之前配置的重定向吗?请从隐身浏览器窗口尝试此配置以确保。
  • 我认为这可以正常工作,但我错过了重写以确保使用新的提升标头正确重写所有 URI。当你浏览任何链接时,你会得到一个 404
  • 所以你的外部网站使用绝对链接而不是相对链接?代理此类站点是一项艰巨的任务。您可以尝试使用ngx_http_sub_module,但为此您必须使用--with-http_sub_module 配置参数从源代码手动编译nginx。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 2015-09-20
  • 2017-06-26
  • 2014-07-15
  • 2020-12-27
  • 1970-01-01
  • 2014-03-18
相关资源
最近更新 更多