疯狂:IF条款打破了LOCATION条款

时间:2013-02-07 05:40:37

标签: nginx

nginx.conf包含以下内容

     location /beta/ {
        proxy_pass http://otherhost/;
      }

然后以下两个检索工作:

  • curl -H 'User-Agent: Mozilla' http://localhost/beta/admin.html
  • curl -H 'User-Agent: iPhone' http://localhost/beta/admin.html

他们都检索http://otherhost/admin.html

当我将nginx.conf更改为:

     location /beta/ {
        if ($http_user_agent ~ iPhone ) {
        }
        proxy_pass http://otherhost/;
      }

然后curl -H 'User-Agent: Mozilla' http://localhost/beta/admin.html继续工作但是 curl -H 'User-Agent: iPhone' http://localhost/beta/admin.html给出404和其他主机抱怨它没有名为beta/admin.html的文件。无论if是否为空,都会发生这种情况。

咦?

1 个答案:

答案 0 :(得分:0)

你已经明白了一个已知的问题:If is evil in nginx,意思是避免if - location内的阻塞 - 阻塞如果完全可行(链接解释了原因和方法)