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
私のファイルは間違っていますか?この問題を解決するにはどうすればよいですか?これ!
私が思うのは原因です:
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を確認し、タイムアウトを確認し、ログを確認します。これが最も重要です...