Ubuntu

為什麼 haproxy 不起作用?

  • September 10, 2015

我在 Amazon.com 中使用 ubuntu 創建了 2 個實例並在其上安裝了 HAProxy。第一台伺服器中的 HAProxy 工作。

自從我嘗試設置 iptables 以來,第二台伺服器中的 Haproxy 不起作用。

我嘗試執行curl localhost,但它告訴我

503 Service Unavailable

No server is available to handle this request

重啟實例沒有幫助。幫忙查一下?

最後 iptables 更改:

iptables -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT 
iptables -A INPUT -p icmp --dport 80 -j ACCEPT 
iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -s ... -p icmp --icmp-type echo-request -j ACCEPT 
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

haproxy 配置:

   global
       log /dev/log    local0
       log /dev/log    local1 notice
       chroot /var/lib/haproxy
       user haproxy
       group haproxy
       daemon

defaults
       log     global
       mode    http
       option  httplog
       option  dontlognull
       contimeout 5000
       clitimeout 50000
       srvtimeout 50000
       errorfile 400 /etc/haproxy/errors/400.http
       errorfile 403 /etc/haproxy/errors/403.http
       errorfile 408 /etc/haproxy/errors/408.http
       errorfile 500 /etc/haproxy/errors/500.http
       errorfile 502 /etc/haproxy/errors/502.http
       errorfile 503 /etc/haproxy/errors/503.http
       errorfile 504 /etc/haproxy/errors/504.http

frontend tutorial_im
       bind *:80
       default_backend tutorial_http
backend tutorial_http
       balance roundrobin
       mode http
       server web1 *.*.*.*:80 check

iptables -L -nv 輸出:

Chain INPUT (policy ACCEPT 2749 packets, 232K bytes)
pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5704 packets, 675K bytes)
pkts bytes target     prot opt in     out     source               destination

我解決了這個問題。Amazon EC2 有自己的防火牆“安全組”,預設情況下會阻止所有連接。您需要設置出站規則。問題不在 iptables 中。

  1. iptables -A INPUT -p icmp –dport 80 -j ACCEPT

ICMP 協議沒有目標埠

  1. iptables -A INPUT -p icmp -m state –state ESTABLISHED,RELATED -j ACCEPT

您只接受 ESTABLISHED,RELATED 連接用於 icmp 而不是 tcp 埠 80,將 icmp 替換為 tcp

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