nginx - 如何在nginx配置中有条件地添加标题?

标签 nginx

如何在nginx(1.4.6 ubuntu)配置中有条件地添加 header ?

起初我尝试过这样。

 location / {
      add_header X-TEST-0 always-0;

      set $true 1;
      if ($true) {
          add_header X-TEST-1 only-true;
      }

      add_header X-TEST-2 always-2;
  }    

尽管我期望我的nginx设置所有 header (X-TEST-0,1,2),但它仅添加 header X-TEST-1。

接下来,我尝试这样。
 location / {
      add_header X-TEST-0 always-0;

      ##set $true 1;
      ##if ($true) {
      ##    add_header X-TEST-1 only-true;
      ##}

      add_header X-TEST-2 always-2;
  }    

我的nginx按我的预期添加了标题X-TEST-1和X-TEST-2。

我的问题是...
  • 如何有条件地添加标题?
  • 在上面的第一个示例中,nginx为什么只添加X-TEST-1?

  • 提前致谢!

    最佳答案

    如果您以不同的方式思考并使用 map ,这很简单。

    map $variable  $headervalue {
        1        only-true;
        default  '';
    }
    
    # ...later...
    location / {
        add_header X-TEST-1   $headervalue;
    }
    

    如果$ variable为1,将设置$ headervalue,从而添加标题。
    默认情况下,$ headervalue将为空,并且不会添加标题。

    这是有效的,因为Nginx仅在需要时评估 map (到达$ headervalue的地步)。

    看到类似的东西:https://serverfault.com/questions/598085/nginx-add-header-conditional-on-an-upstream-http-variable

    关于nginx - 如何在nginx配置中有条件地添加标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29467671/

    相关文章:

    缓存 auth_request 中的 token

    ember.js - 如何为 Ember.js + Express 设置开发环境

    ssl - AWS API-Gateway 客户端身份验证和 NGINX

    php - 这个错误是怎么回事? nginx

    python - 用于 uvicorn 的 unix 套接字上的 Nginx 反向代理不起作用

    redirect - HTTPS 到 HTTPS 重定向 Nginx

    linux - Nginx 重写规则而不改变 url

    amazon-web-services - .ebextensions 在 elasticbeanstalk 上使用 Docker

    docker - Docker-compose多个端口公开

    python - Django 与 Gunicorn 的不同部署方式