» » » Делаем заглушку на удалённый сайт средствами nginx

Делаем заглушку на удалённый сайт средствами nginx

У нас в конторе есть сайт. Лежит он на нашем же серваке. Так же у нас есть 2 канала интернета. Вначале мы сделали так чтобы сайт открывался внезависимости от того какой канал интернета работает. Для этого нам понадобился выделенный сервер. Как мы это сделали я расскажу в другой статье. В этой же мы рассмотрим как сделать заглушку на такой сайт.
И так, дано
сайт лежит на сервере с адресом 192.168.10.10
выделеный сервер на котором будет заглушка имеет адрес 192.168.20.20

Первым делом устанавливаем nginx. Добавим его репу

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

и устанавливаем

yum install nginx

стартуем

systemctl start nginx
systemctl enable nginx

Вот и всё. Теперь если перейти на 192.168.20.20 должна открыться тестовая страница nginx. А мы тем временем перейдём к настройке проксирования. Открываем файл конфига (у меня это по умолчанию default.conf)

nano /etc/nginx/conf.d/default.conf

и приводим его к такому виду:
server {
    listen       80;
    server_name  localhost;
    charset utf-8;
    
    location / {
        proxy_pass $scheme://192.168.10.10:80$request_uri;
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        if (-f /etc/nginx/maintenance2.file) { 
            return 503;
        }
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
Остановлюсь на некоторых местах подробнее: 

listen       80; - порт который мы слушаем. 
charset utf-8; - кодировка сайта. у меня если не выставить - заглушка была кракозябрами
proxy_pass $scheme://192.168.10.10:80$request_uri; - собственно строчка которая отвечает за проксирование. Не забываем вконце $request_uri, в противном случае будет проксироваться только главная страница сайта

if (-f /etc/nginx/maintenance.file) { 
            return 503;
        }

собственно отвечает за то в каком случае выводить страницу ошибки. Тут сказано что при нахождении файла, выдавать ошибку 503.

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

это отвечает за то какой файл выдавать при той или иной ошибке и где он лежит

Вот и всё. Далее настраиваем скрипт который пингует наш сервер с сайтом, и если пинг пропадает - создаёт файл. nginx видит файл и ставит заглушку. во всех остальных случаях просто проксирует сайт. 

{poster_avatar}  ArcheRAWG
80 22.08.18


Кликните на изображение чтобы обновить код, если он неразборчив