Apache-2.2

Apache 反向代理間歇性錯誤 113 - 沒有到主機的路由

  • February 4, 2015

我在 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

祝你好運。

保羅

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