2013-08-20 2 views
2

У меня есть установка Nginx перед двумя серверами IIS. Основная цель - загрузить баланс, ssl offload и статический контент кэша.При использовании NginX в качестве обратного прокси-сервера, как я могу отказаться от ссылки на обслуживание?

У меня очень трудное время, когда отображается страница обслуживания, когда все серверы Upstream недоступны или выбрасывают 404 ошибки. Я создал файл maintenance.html в своем ящике NginX, но не могу загрузить его. Иногда я могу загрузить его для загрузки IIS 404, а иногда и для загрузки по умолчанию NginX 404. То, что я действительно пытаюсь сделать, - это то, что по какой-то причине все восходящие потоки вниз или бросание 404s - это показать пользователю «Техническое обслуживание», и в конечном итоге добавить код на этой странице, чтобы предупредить меня о том, что все восходящие серверы опустились.

Вот моя конфигурация:

# ------------------------------------------- 
#  ACTUAL SITE WITH - SSL CERTIFICATE 
#------------------------------------------ 


# Backend IIS Servers 
upstream backend-iis { 

    # Health Checks 
    #healthcheck_enabled; 
    #healthcheck_delay 5000; 
    #healthcheck_timeout 5000; 
    #healthcheck_failcount 1; 

    # Upstream Servers 
     server ww1.pickle.com max_fails=3 fail_timeout=31s; 
     server ww2.pickle.com max_fails=3 fail_timeout=31s; 
     #server ww3.pickle.com; 

     # Sticky Sessions 
     #sticky; 
     #ip_hash; 

} 


# Server Configuration 
server { 

    # Server Specific Settings 
     server_name  www.pickle.com; 
     access_log   /var/log/nginx/www.pickle.com.log ; 
     keepalive_timeout 5; 
     allow    all; 
     server_tokens  off; 
     gzip    on; 
     gzip_vary   on; 

    # SSL Settings (with SPDY 2) 
     ssl on; 
     listen 443 ssl spdy; 
     ssl_certificate /usr/share/nginx/ssl-certs/pickle_com/pickle_basic.crt; 
    # ssl_certificate /usr/share/nginx/ssl-certs/pickle_com/pickle_ev.crt; 
     ssl_certificate_key  /usr/share/nginx/ssl-certs/pickle_com/pickle.com.key; 
     ssl_session_timeout  15m; 
     ssl_protocols    SSLv3 TLSv1 TLSv1.1 TLSv1.2; 
     ssl_ciphers    RC4:HIGH:!aNULL:!MD5; 
     ssl_prefer_server_ciphers on; 
     ssl_session_cache   shared:SSL:10m; 




    # Proxy Pass to: backend-iis 
    location/{ 

      #root    /usr/share/nginx/sites/pickle-down/; 

     # Proxy Header to Keep Ip Address and Hostname 
     proxy_redirect off; 
     proxy_set_header Host    "www.pickle.com"; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 

     # Proxy Pass to Backend IIS Servers 
     proxy_pass    http://backend-iis; 
     # proxy_next_upstream error timeout http_404; 
     proxy_temp_path  /usr/share/nginx/temp; 

     #Intercept Proxy Errors (show Nginx Error Pages) 
     #proxy_intercept_errors on; 
       error_page 404 500 502 503 504 = @maintenance; 

    } 


    # Proxy Pass to: backend-iis 
    location @maintenance { 
     internal; 
     root  /usr/share/nginx/sites/pickle-down; 
     index maintenance.html index.html index.htm; 
     allow all; 

    } 



    error_page 500 502 503 504 /50x.html; 
    location = /50x.html { 
    root html; 
    } 

    error_page 404 /404.html; 
    location = /usr/share/nginx/sites/pickle-down/404.html { 
    root html; 
    } 
} 

ответ

0

вы используете бесплатную версию?

Я думаю, что вы ищете в несвободной версии под названием NGINX Plus.

+1

На самом деле получил его на работу с бесплатной версией. Пришлось делать пользовательскую сборку с несколькими дополнительными функциями. Вот сценарий bash, который решает проблему. Возможно, вам придется изменить его, потому что скрипт bash также выполняет несколько дополнительных функций, таких как создание пользовательских каталогов, которые мы всегда используем. https://github.com/villanus/nginx/blob/master/bash/install-nginx-custom.sh – Frank