いくつかのWebサーバー(HTTPモード)の負荷分散にHAProxyを使用しています。 Webサーバーは厳密に動的です。つまり、静的コンテンツはなく、Webサービスのみです。
タイプ(類似)のURL
http://192.168.5.10:8080/small
http://192.168.5.10:8080/medium
http://192.168.5.10:8080/large
今、いくつかのマシンでこれらの3つのURLに着信要求を転送するようにHAProxyを構成するとき、acl
およびpath_end
/path_beg
を使用してurl_pathを指定していますが、 Not Found on Accelerator
エラーが表示され、問題を特定することが難しくなります。
以下は、私が使用している構成です。また、エラーはログに記録されません。
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 10000
srvtimeout 10000
frontend http_proxy
bind 192.168.5.9:8888
acl is_small path_end -i small
acl is_medium path_end -i medium
acl is_large path_end -i large
use_backend web_server_small if is_small
use_backend web_server_medium if is_medium
use_backend web_server_large if is_large
backend web_server_small
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.10:8080 check
server web_2 192.168.5.11:8080 check
backend web_server_medium
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.12:8080 check
server web_2 192.168.5.13:8080 check
backend web_server_large
mode http
balance roundrobin
option httpclose
server web_1 192.168.5.14:8080 check
server web_2 192.168.5.15:8080 check
HAProxyからurl_pathを使用してweb_serverにリクエストを送信することはできますか?.
HAProxyがそれをhttp://192.168.5.2:80/small
として受信した場合、リクエストをhttp://192.168.5.10:8080/small
としてWebサーバーに送信します。
パスがURLの先頭に含まれているため、path_begを使用しないのはなぜですか。path_endの推奨される使用法は、ファイル名拡張子です。
acl is_small path_beg -i /small acl is_medium path_beg -i /medium acl is_large path_beg -i /large
HTTPリクエストのパスはalwaysであり、バックエンドサーバーに渡されます。
GET /small HTTP/1.1
hAproxyの背後にそのリクエストと同様に表示されます。これが何らかの形で切り捨てられていると思われる場合
GET / HTTP/1.1
hAproxyの背後にあるサーバーで、これを使用して確認する必要があります
tcpdump -i any port 8080 -As1024 | grep GET
そのサーバーで、インバウンドGET
リクエストを監視します。
私は手足を伸ばしていて、HAproxyがURIの前に何かをinsertすると期待していると仮定します。
server web_1 192.168.5.14:8080/my/path check
/small
を/my/path/small
。これはreqrep
オプションを使用して実現できます。詳細については documentation を参照してください。