在nginx重写中发送额外的标头

Aut*_*act 6 nginx

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

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

我需要显示一个popup-banner来通知用户域名迁移.我希望这个基于referrer或者某种其他标题app.newexample.com

但是我如何在上面附加一个额外的标题,rewrite以便javascript将检测到标题并仅在该标题存在时显示标题因为直接用户app.newexample.com不应该看到弹出横幅?

Ale*_*rov 7

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

  • 曲奇饼
  • 网址本身

由于您要将用户重定向到新域,因此cookie不会发生.但即使在通用域的情况下,我也会选择URL来传输这种信息,比如

server_name app.example.com;
location /app/ {
    rewrite ^/app/(.*)$ http://app.newexample.com/$1?from_old=yes;
}
Run Code Online (Sandbox Code Playgroud)

这使您可以自由地在Nginx或浏览器中进行处理(使用JavaScript).您甚至可以在新应用服务器Nginx配置中为JavaScript发出特殊的HTTP标头:

server_name app.newexample.com;
location /app {
  if ($arg_from_old) {
    add_header X-From-Old-Site yes;
  }
}
Run Code Online (Sandbox Code Playgroud)