2016-06-28 34 views
0

我正在嘗試使用nginx是 - 調用後端進行身份驗證,如果響應成功,我將重定向到網站1(例如-google .com),如果身份驗證失敗,我將重定向到website2(例如facebook)。Nginx的錯誤 - 開始nginx:nginx:emerg unknown「狀態」變量

下面是我nginx.conf-

user    nginx;               
worker_processes 1;                

error_log /var/log/nginx/error.log;            
pid  /var/run/nginx.pid;             

events {                   
    worker_connections 1024;             
}                    

http {                   
    include  /etc/nginx/mime.types;           
    default_type application/octet-stream;          

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
        '[===>$status] $body_bytes_sent "$http_referer" '   
        '"$http_user_agent" "$http_x_forwarded_for"';    

    access_log /var/log/nginx/access.log main;         

    sendfile  on;               
    keepalive_timeout 65;              

    # Load config files from the /etc/nginx/conf.d directory      
    # The default server is in conf.d/default.conf        
    include /etc/nginx/conf.d/default.conf;          
} 

的default.conf文件如下 -

server { 
    listen  80 default_server; 
    server_name _; 

    #charset koi8-r; 

    #access_log logs/host.access.log main; 

    location/{ 
     # root /usr/share/nginx/html; 
     # index index.html index.htm; 

     proxy_set_header X-Real-IP $remote_addr; 
     proxy_set_header X-Forwarded-For $remote_addr; 
     proxy_set_header Host $host; 
     proxy_pass http://backend_ip_Address; 


     set $my_var 0; 
     if ($status = "200"){ 
      set $my_var 1; 
     } 

     #if($status = 4xx) { 
     # set $my_var 2; 
     #} 

     if ($my_var = 1){ 
      proxy_pass http://www.google.com; 
     } 

     if ($my_var = 2) { 
      proxy_pass http://www.facebook.com; 
     } 
    } 

    error_page 404    /404.html; 
    location = /404.html { 
     root /usr/share/nginx/html; 
    } 

    # redirect server error pages to the static page /50x.html 
    # 
    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
     root /usr/share/nginx/html; 
    } 
} 

我現在面臨的問題是,當我試圖執行sudo的服務nginx的重啓有了這個配置,我得到以下錯誤 - 開始nginx:nginx:[emerg]未知「狀態」變量

相同的$狀態也存在於nginx.con f日誌配置,並正確記錄響應代碼,如301,200等。但相同的狀態變量在default.conf文件中不起作用。任何幫助我做錯了什麼?

我試着用body_bytes_sent頭替換狀態,它的工作原理。

通過谷歌搜索https://www.google.co.in/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=nginx++unknown+%22status%22+variable只有相關的信息是https://www.drupal.org/node/2738983但沒有太多的幫助來解決這個問題。

回答

0

狀態變量在非常晚的階段被定義,在請求被處理並且響應準備好被髮回之後。

您不能將其用於條件路由。

通常用於記錄。

在這裏,您可以瞭解nginx的指令執行順序和階段: https://openresty.org/download/agentzh-nginx-tutorials-en.html

+0

感謝亞歷山大對你的迴應。我的用例如下 - 我將用nginx和用戶憑證(我上面的帖子中的proxy_pass http:// backend_ip_Address的東西)來調用一個認證模塊。 如果身份驗證成功(200),那麼我將調用另一個服務來獲取我的數據。 如果它是未經授權的(301)我需要將此信息發回給調用者。 任何關於如何實現這一點的建議。 – user220985

+0

閱讀http://nginx.org/en/docs/http/ngx_http_auth_request_module.html –

+0

TLDR:您應該爲auth配置單獨的位置併爲受保護的位置添加auth_request指令 –