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