Я использую 503 HTTP Status и скоро страницу для режима обслуживания.
Есть ли способ получить страницу 503, созданную на стороне сервера HAproxy, вместо пустой / недоступной страницы по умолчанию?
Я использую Openshift + HAproxy + Cloudflare + PHP.
Заранее спасибо.
Конфигурация Haproxy (некоторые комментарии удалены):
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets
acl url_static path_end -i .jpg .gif .png .css .js
use_backend static if url_static
default_backend app
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend static
balance roundrobin
server static 127.0.0.1:4331 check
#---------------------------------------------------------------------
# round robin balancing between the various backends
#---------------------------------------------------------------------
backend app
balance roundrobin
server app1 127.0.0.1:5001 check
server app2 127.0.0.1:5002 check
server app3 127.0.0.1:5003 check
server app4 127.0.0.1:5004 check
Да. Использовать файл ошибок директива, например, через:
errorfile 503 /etc/haproxy/errors/503.http
Синтаксис следующий:
errorfile <code> <file>
Цитата из документов:
<code> is the HTTP status code. Currently, HAProxy is capable of generating codes 200, 400, 403, 405, 408, 429, 500, 502, 503, and 504. <file> designates a file containing the full HTTP response. It is recommended to follow the common practice of appending ".http" to the filename so that people do not confuse the response with HTML error pages, and to use absolute paths, since files are read before any chroot is performed.
Например, содержимое файла может быть:
HTTP/1.1 503 Service Unavailable\r\n
Cache-Control: no-cache\r\n
Connection: close\r\n
Content-Type: text/html\r\n
<html>
<head>
<title>Service unavailable</title>
</head>
<body>
<h1>Service unavailable</h1>
</body>
Есть ли способ получить страницу 503, созданную на стороне сервера HAproxy, вместо пустой / недоступной страницы по умолчанию?
Это не тот вопрос, который вам следует задавать. HAProxy всегда использует ответ сервера. Файл ошибок используется только для сгенерированных ошибок внутри пользователя HAProxy.
Если вы проверите журналы своего веб-сервера, вы обнаружите, что эти конкретные запросы на самом деле не отправляются на веб-сервер.
Это происходит потому, что HAProxy считает, что ваш сервер не работает ... потому что он получает 503 от сервера в ответ на проверку работоспособности.
Если бы сервер возвращал 502 или 400 или любой код ошибки при проверках работоспособности, вы все равно получали бы 503 от HAProxg, потому что сервер официально не работает.
WARNING] 201/142518 (192371) : Server express/local-gear is DOWN, reason: Layer7 wrong status, code: 503, info: "HTTP status check returned code <3C>503<3E>", check duration: 87ms. 0 active and 0 backup servers left. 0 sessions active, 0 requeued, 0 remaining in queue
Вы, очевидно, отредактировали строку option httpchk
из конфигурации, которую вы опубликовали, но она должна быть там, иначе HAProxy выполнит только проверку уровня 4, и этого не произойдет.
Самое простое решение - удалить эту строку из конфигурации серверной части или конфигурации по умолчанию.