2017-02-27 111 views
0

所以即時通訊嘗試檢查我的http_response code從我的上游服務器,並通過默認響應代碼,當上遊是關閉;並且當上遊代理完成時,代理所有對它的請求。Nginx檢查上游服務器狀態與如果語句

我的nginx(不工作)的配置看起來像這樣

server { 
    listen 80; 

    server_name auth.example.com; 

    set $upstream 123.456.789.123:8080; 


location @active{ 
    proxy_pass_header Authorization; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_http_version 1.1; 
    proxy_set_header Connection ""; 
    proxy_buffering off; 
    client_max_body_size 10M; 
    proxy_read_timeout 36000s; 
    proxy_redirect off; 
    proxy_pass http://$upstream; 
} 

location @outage { 
    return 200 "yass!"; 

} 

location/{ 
    error_page 500 = @outage; 
    set $200 @active; 

    if ($http_status != 404){ 
    return 500; 
    } 
    if ($http_status = 200) { 
     return 200; 
    } 

} 

什麼,我想實現很簡單,如果我的上游服務器已關閉返回默認200響應。

如果我的上游服務器可用,請代理對它的所有請求。

我怎麼能用nginx實現這個(一個代碼示例很酷:-))。

回答

0

所以我覺得我錯了,下面的配置爲我工作。

server { 
listen 80; 

server_name auth.example.com; 

set $upstream 123.456.789.123:8080; 

location/{ 
    proxy_pass_header Authorization; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_http_version 1.1; 
    proxy_set_header Connection ""; 
    proxy_buffering off; 
    client_max_body_size 10M; 
    proxy_read_timeout 36000s; 
    proxy_redirect off; 
    proxy_pass http://$upstream; 

    error_page 500 502 503 504 = @outage; 
} 

location @outage { 
    return 200 "yas"; 

    } 
} 
+0

如果您希望從代理中導出錯誤,您可能還需要'proxy_intercept_errors on;'。我懷疑你的情況,*上游是關閉*響應來自'nginx'。 –