Apache 反向代理間歇性錯誤 113 - 沒有到主機的路由
我在 CentOS 4 上有一個 Apache 2.0.52 伺服器,它前端有幾個應用伺服器(Jetty 和 Tomcat 的混合)。Apache 有一些配置如下的虛擬主機:
<VirtualHost www1.example.com:443> ServerName www1.example.com DocumentRoot "/mnt/app_web/html" SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt SSLCertificateChainFile /etc/httpd/conf/ssl.crt/chain.crt SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0 RewriteEngine on RewriteRule ^/app1/(.*)$ http://app1.example.com:8080/app1/$1 [P,L] RewriteRule ^/app2/(.*)$ http://app2.example.com:8080/app2/$1 [P,L] </VirtualHost>
但是,我在日誌中間歇性地收到以下錯誤:
[Fri Dec 04 07:19:41 2009] [error] (113)No route to host: proxy: HTTP: attempt to connect to 10.0.0.1:8080 (app1.example.com) failed
我最初嘗試關閉 IPv6,這似乎在很大程度上治癒了它,但我仍然偶爾會收到這些消息。
此外,我們在同一個前端執行 memcache,當我在 Apache 的日誌中收到這些消息時,以下命令不起作用:
echo stats | nc 127.0.0.1 11211
不列印任何消息,但也不列印統計資訊。我完全不知道如何進行故障排除。=(
要解決此問題,您需要在應用伺服器的“iptables”中添加規則。對於 Red Hat Enterprise,該文件是 ‘/etc/sysconfig/iptables’ 。CentOS 應該是一樣的。
您可能有一個或多個規則接受來自前端的新連接,如下所示:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp -s ‘前端IP’ –dport ‘埠號’ -j ACCEPT
要麼
-A RH-Firewall-1-INPUT -m state –state NEW -m multiport -m tcp -p tcp -s ‘前端的IP’ –dports ‘埠號’ -j ACCEPT
您的問題應該通過添加規則來解決,這些規則為通過前面規則的每個 SYN 數據包向前端發送 tcp-reset。規則應如下所示:
-A RH-Firewall-1-INPUT -m tcp -p tcp -s ‘前端的IP’ –dport ‘埠號’ –syn -j REJECT –reject-with tcp-reset
要麼
-A RH-Firewall-1-INPUT -m multiport -m tcp -p tcp -s ‘前端的 IP’ –dports ‘埠號’ –syn -j REJECT –reject-with tcp-reset
在您的“iptables”末尾添加規則,就在規則之前,如下所示:
-A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
祝你好運。
保羅