web-dev-qa-db-ja.com

Haproxy503サービスを利用できません。このリクエストを処理するために利用できるサーバーはありません

Haproxyは.css、.js、.jpegなどの静的ファイルをどのように処理しますか?設定ファイルを使用すると、ブラウザに次のように表示されます。

503サービスを利用できません

この要求を処理するために使用できるサーバーはありません。

これは私の設定です:

global
  daemon
  group root
  maxconn  4000
  pidfile  /var/run/haproxy.pid
  user root

defaults
  log  global
  option  redispatch
  maxconn 65535
  contimeout 5000
  clitimeout 50000
  srvtimeout 50000
  retries  3
  log 127.0.0.1 local3
  timeout  http-request 10s
  timeout  queue 1m
  timeout  connect 10s
  timeout  client 1m
  timeout  server 1m
  timeout  check 10s


listen dashboard_cluster :8888
  mode http
  stats refresh 5s
  balance roundrobin
  option httpclose
  option tcplog
  #stats realm Haproxy \ statistic
  acl url_static path_beg -i /static
  acl url_static path_end -i .css .jpg .jpeg .gif .png .js
  use_backend static_server if url_static

backend static_server
  mode http
  balance roundrobin
  option httpclose
  option tcplog
  stats realm Haproxy \ statistic
  server controller1 10.0.3.139:80 cookie controller1 check inter 2000 rise 2 fall 5
  server controller2 10.0.3.113:80 cookie controller2 check inter 2000 rise 2 fall 5

私のファイルは間違っていますか?この問題を解決するにはどうすればよいですか?これ!

6
changzhi

私が思うのは原因です:

default_backendが定義されていません。 503はHAProxyによって送信されます---これはログにNOSRVとして表示されます。

別の考えられる原因

私の経験の1つに基づくと、受け取ったHTTP 503エラーは、同じIPとポートx.x.x.x:80に対して持っている2つのバインディングが原因でした。

frontend test_fe
     bind x.x.x.x:80
     bind x.x.x.x:443 ssl blah

     # more config here

frontend conflicting_fe
     bind x.x.x.x:80

     # more config here

Haproxy構成チェックはそれについて警告せず、netstatは2つのLISTENエントリを表示しません。そのため、何が起こっているのかを理解するのに時間がかかりました。

これは、2つのhaproxyサービスを実行している場合にも発生する可能性があります。実行中のプロセスを確認し、古いプロセスを終了してください。

タイマーを大きくして、サーバーに到達できることを確認してください。

HAproxyドキュメントから:

It can happen from many reasons:

The status code is always 3-digit. The first digit indicates a general status :
 - 1xx = informational message to be skipped (eg: 100, 101)
 - 2xx = OK, content is following   (eg: 200, 206)
 - 3xx = OK, no content following   (eg: 302, 304)
 - 4xx = error caused by the client (eg: 401, 403, 404)
 - 5xx = error caused by the server (eg: 500, 502, 503)

  503  when no server was available to handle the request, or in response to
        monitoring requests which match the "monitor fail" condition

  When a server's maxconn is reached, connections are left pending in a queue
  which may be server-specific or global to the backend. In order not to wait
  indefinitely, a timeout is applied to requests pending in the queue. If the
  timeout is reached, it is considered that the request will almost never be
  served, so it is dropped and a 503 error is returned to the client.

ログにSCが表示されている場合:

SC   The server or an equipment between it and haproxy explicitly refused
          the TCP connection (the proxy received a TCP RST or an ICMP message
          in return). Under some circumstances, it can also be the network
          stack telling the proxy that the server is unreachable (eg: no route,
          or no ARP response on local network). When this happens in HTTP mode,
          the status code is likely a 502 or 503 here.

ACLを確認し、タイムアウトを確認し、ログを確認します。これが最も重要です...

3
gleb glazkov