Haproxy

Openshift + HAproxy 503 自定義頁面

  • July 21, 2016

我正在使用 503 HTTP 狀態和即將推出的維護模式頁面。

有沒有辦法讓 HAproxy 服務於伺服器端生成的 503 頁面而不是預設的空白/不可用頁面?

我正在使用 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

有沒有辦法讓 HAproxy 服務於伺服器端生成的 503 頁面而不是預設的空白/不可用頁面?

這不是你應該問的實際問題。HAProxy 總是使用伺服器的響應。錯誤文件僅用於HAProxy內部生成的錯誤。

如果您檢查您的 Web 伺服器日誌,您會發現這些特定請求實際上並未發送到 Web 伺服器。

發生這種情況是因為 HAProxy 認為您的伺服器已關閉……因為它從伺服器獲取 503 以響應執行狀況檢查。

如果伺服器在執行狀況檢查中返回 502 或 400 或任何錯誤程式碼,您仍會從 HAProxg 收到 503,因為伺服器已正式關閉。

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 層檢查,而這不會發生。

最簡單的解決方案是從後端或預設配置中刪除該行。

引用自:https://serverfault.com/questions/791027