nginx - 在 nginx 重写中发送额外的 header

标签 nginx

现在,我正在从 app.example.com 迁移我的应用程序域至app.newexample.com使用以下 nginx配置:

server {
    server_name app.example.com;
    location /app/ {
        rewrite ^/app/(.*)$ http://app.newexample.com/$1;
    }
}

我需要显示一个弹出横幅来通知用户域名迁移。
我想基于 referrerapp.newexample.com 上的某种其他标题

但是我怎样才能在上面的 rewrite 上附加一个额外的标题这样 javascript 就会检测到该标题并仅在该标题存在时才显示横幅,因为用户直接访问 app.newexample.com不应该看到那个弹出横幅吗?

最佳答案

问题是,当您“重写”为具有协议(protocol)和主机名的 URI(即 http://app.newexample.com/ 在您的情况下)时,Nginx 会发出公平的 HTTP 重定向(我猜代码将是 301 又名“永久重定向”)。这使您只有两种机制可以将任何信息传输到新 URL 的处理程序:

  • cookies
  • URL 本身

  • 由于您将用户重定向到新域,因此 cookie 是不行的。但即使在公共(public)域的情况下,我也会选择 URL 来传输此类信息,例如
    server_name app.example.com;
    location /app/ {
        rewrite ^/app/(.*)$ http://app.newexample.com/$1?from_old=yes;
    }
    

    这使您可以自由地在 Nginx 或浏览器中(使用 JavaScript)进行处理。你甚至可以做你想做的事,在新的应用服务器 Nginx 配置中为 JavaScript 发出一个特殊的 HTTP 头:
    server_name app.newexample.com;
    location /app {
      if ($arg_from_old) {
        add_header X-From-Old-Site yes;
      }
    }
    

    关于nginx - 在 nginx 重写中发送额外的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16505647/

    相关文章:

    nginx - 陷入 Terraform 到 Kubernetes 的部分 helm 发布中

    node.js - 使用 Nginx 时 socket.io 出现 CORS 错误

    python - 当与 uwsgi 一起使用时,redis 附加值而不是设置它

    Django + uWSGI + nginx url 映射

    amazon-web-services - 在 AWS Application Load Balancer 上使用 Go 时,WebSocket 连接失败并出现 301

    docker - Nginx 到 Docker 容器的动态代理

    magento - Nginx Magento配置index.php循环错误

    php - 在 PHP 7.0 中 fatal error : Uncaught Error: Call to undefined function json_encode()

    django - 从我的Django应用容器中获取主机IP

    django - Nginx为Django应用提供静态文件