2016-01-12 61 views
0

NGINX 1.9x/RHELNGINX在if塊中使用自定義/映射變量

我試圖在未設置cookie的情況下爲某個請求返回204。我無法讓nginx.conf文件通過配置測試或重新啓動。嘗試對創建的MAP變量進行測試時,第一個IF塊失敗。

http block... 
    map $http_cookie $my_login_cookie { 
     default 0; 
     "~hello_logged_in" 1; 
    } 


    Server Block.... 

    location ~ /$ { 

     if ($my_login_cookie = 0) { <<<<<< Statement is not working 
      if ($args ~ "^Blah=(.*)") { 
      return 204; 
      } 
     } 
    } 

我發現很多代碼示例顯示這種事情應該是可行的。我失去了什麼?!?!

< < < < < <更新後的最終工作代碼>>>>>>

http block... 
    map $http_cookie $my_login_cookie { 
     default 0; 
     "~hello_logged_in" 1; 
    } 

    Server Block.... 

    location ~ /$ { 

     set $my_redirect y; 

     if ($my_login_cookie = 0) { 
     set $my_redirect "${my_redirect}e"; 
     } 

     if ($args ~ "^blah=(.*)") { 
     set $my_redirect "${my_redirect}s"; 
     } 

     if ($my_redirect = "yes") { 
      return 204; 
     } 

    } 
+0

我張貼惡意代碼applogizes。當我添加註釋(<<<<<聲明不起作用)時,我的花括號會被吃掉。正確的代碼現在在那裏。歡呼 – SmileIT

回答

1

嵌套IFS和多個條件IFS不受nginx的支持。

您錯過了{after if($ my_login_cookie = 0),否則您會在if ($args ~ "^Blah=(.*)") {行上收到以下警告"if" directive is not allowed here

爲你的配置可能的解決辦法:

# test whether my_login_cookie is set 
if ($my_login_cookie = 0) { 
    set $test C; 
} 

# test 
if ($args ~ "^Blah=(.*)") { 
    set $test "${test}A"; 
} 

# if both of the above tests are true return 
if ($test = CA) { 
    return 204; 
} 
+0

謝謝!我結束了以下設置$ my_redirect y; if($ my_login_cookie = 0){ set $ my_redirect「$ {my_redirect} e」; ($ args〜「^ blah =(。*)」){ set $ my_redirect「$ {my_redirect} s」; } if($ my_redirect =「yes」){ return 204; } – SmileIT

+0

我在上面添加了我的最終代碼。再次感謝。 – SmileIT