当使用NginX作为反向代理时,如何回退到维护url?

当使用NginX作为反向代理时,如何回退到维护url?,nginx,reverse-proxy,Nginx,Reverse Proxy,我在两台IIS服务器前面安装了Nginx。主要目标是负载平衡、ssl卸载和缓存静态内容 当所有上游服务器都不可用或抛出404错误时,我会显示一个维护页面。我已经在我的NginX盒上创建了一个maintenance.html文件,但无法加载它。我有时可以让它加载IIS 404,有时也可以让它加载默认的NginX 404。我真正想做的是,如果出于某种原因,所有上游服务器都关闭或抛出404,则向用户显示一个“维护”页面,并最终在该页面中输入一些代码,以提醒我所有上游服务器都已关闭 以下是我的配置: #

我在两台IIS服务器前面安装了Nginx。主要目标是负载平衡、ssl卸载和缓存静态内容

当所有上游服务器都不可用或抛出404错误时,我会显示一个维护页面。我已经在我的NginX盒上创建了一个maintenance.html文件,但无法加载它。我有时可以让它加载IIS 404,有时也可以让它加载默认的NginX 404。我真正想做的是,如果出于某种原因,所有上游服务器都关闭或抛出404,则向用户显示一个“维护”页面,并最终在该页面中输入一些代码,以提醒我所有上游服务器都已关闭

以下是我的配置:

# -------------------------------------------
#       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;
  }
}

你使用的是免费版本吗

我想你要找的是非免费版本,叫做


实际上,它与免费版本配合使用。不得不做一些额外的定制构建。下面是一个bash脚本,它解决了这个问题。您可能需要修改它,因为bash脚本还执行一些额外的操作,例如创建我们经常使用的自定义目录。