У меня есть сервер Apache 2.0.52 на CentOS 4, который поддерживает несколько серверов приложений (смесь 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
Сообщения не печатаются, но и статистика не печатается. Я совершенно не понимаю, как продолжить устранение неполадок. знак равно
У меня была эта проблема (113 - Нет маршрута к хосту) на CentOS 6.5 с Apache 2.2, хотя она была только периодической - примерно каждые 20 минут. Я сомневаюсь, что это связано с вашей проблемой, но это может кому-то помочь.
Я захватил сетевой трафик на обоих концах с помощью Wireshark и обнаружил, что административно запрещенные пакеты хоста ICMP иногда возвращались сервером приложений в ответ на SYN-пакет от обратного прокси. Однако в большинстве случаев SYN-файлы принимались.
Основываясь на ответе Пола, я проверил правила iptables - действительно, правила, конечно же, позволяли принимать НОВЫЕ соединения на порту 8009.
Я решил сбросить iptables командой:
service iptables restart
После перезапуска iptables проблема «113 - Нет маршрута к хосту» полностью исчезла.
Чтобы решить эту проблему, вам необходимо добавить правила в 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 ПРИНЯТЬ
ИЛИ
-A RH-Firewall-1-INPUT -m state --state NEW -m multiport -m tcp -p tcp -s 'IP интерфейсов' --dports "номера портов" -j ПРИНЯТЬ
Ваша проблема должна быть решена путем добавления правил, которые отправляют tcp-reset во внешние интерфейсы для каждого пакета SYN, прошедшего через предыдущие правила. Правила должны выглядеть так:
-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 многопортовый -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 -hibited
Удачи.
Павел