Назад | Перейти на главную страницу

Периодическая ошибка обратного прокси-сервера Apache 113 - Нет маршрута к хосту

У меня есть сервер 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

Удачи.

Павел