Назад | Перейти на главную страницу

«Резервный» http-сервер

У меня есть веб-приложение, которое обслуживается автономным приложением. Иногда JVM работает с ошибками, но чаще всего мне нужно отключить ее, чтобы развернуть новую версию или обновить систему. По разным причинам он должен обслуживать HTTP / HTTPS-запросы напрямую, поэтому я не могу использовать прокси перед ним.

Есть ли способ заставить саму систему (Ubuntu Linux) отвечать на HTTP-запросы, когда приложение не работает? Или, другими словами, есть ли способ настроить сервер так, чтобы всякий раз, когда нормальным ответом было «соединение отказано», вместо этого он обслуживал некоторую статическую (503) страницу? Если возможно, было бы здорово, если бы он также мог обрабатывать HTTPS.

Вы могли бы использовать haproxy в режиме TCP для прозрачного проксирования запросов. Ваш сервер приложений не заметит разницы, Кроме что удаленный ip будет локальным хостом. Он вернет клиенту ошибку, если по умолчанию он не может связаться с внутренним сервером. Вы также можете указать резервный сервер, на который будут направляться запросы при выходе из строя серверной части.

Если вы действительно хотите избежать «прокси», вы можете использовать iptables для перенаправления портов. Вы должны запустить такой сервер, как nginx, для обслуживания файлов ошибок на неиспользуемом порту. С помощью сценария мониторинга (или демона вроде Монит), вы можете перенаправить порт приложения на свой сервер ошибок с помощью следующего правила:

iptables -t nat -A PREROUTING -i eth0 -p tcp \
--dport $SVC_PORT -j REDIRECT --to-port $ERROR_PORT

Ваша система мониторинга должна будет динамически вставлять или удалять правила по мере изменения доступности служб.

Невозможно сделать это напрямую (т.е. если приложение не работает, оно не работает и ничего не возвращает, даже ошибку)
Однако вы можете запустить что-то вроде NGINX, который может отправлять пользовательские ошибки, если основной сервер не работает или возвращает ошибку.