Httpd возвращает 503 Service Unavailable с mod_proxy для Tomcat 8

81

Я пытаюсь интегрировать Tomcat с Apache. Моя цель - перенаправить все запросы http://localhost/myappнаhttp://localhost:8080

Я следовал этому руководству: http://tomcat.apache.org/tomcat-8.0-doc/proxy-howto.html

Мой httpd.confвыглядит так:

Include conf.modules.d/*.conf
LoadModule proxy_module  modules/mod_proxy.so

ProxyPass         /myapp  http://localhost:8080 retry=0 timeout=5
ProxyPassReverse  /myapp  http://localhost:8080

Мой server.xml в apache-tomcat выглядит так:

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" proxyPort="80" />

Теперь, когда я пробую URL-адрес http://localhost/myapp, он выдает 503 Service Unavailableошибку.

И Tomcat, и Apache работают. URL http://localhost:8080работает нормально.

Может быть проблема с правами доступа к файлам?

Для tomcatпользователя и группы есть root/rootи для httpdпользователя и группы.apache/apache

Я что-то упускаю или делаю неправильно?

Версия Httpd - 2.4.6, а версия Tomcat - 8.0.

Журналы ошибок httpd:

[proxy:error] [pid 19905] (13)Permission denied: AH00957: HTTP: attempt to connect to 127.0.0.1:8080 (localhost) failed

[proxy:error] [pid 19905] AH00959: ap_proxy_connect_backend disabling worker for (localhost) for 0s

[proxy_http:error] [pid 19905] [client ::1:51615] AH01114: HTTP: failed to make connection to backend: localhost

Решено!

Ответ здесь: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

user2354302
источник
3
Спасибо за подсказку. Я нашел этот sysadminsjourney.com/content/2010/02/01/…, который решил проблему
user2354302
Лучше удалите опцию повтора и тайм-аута и проверьте
ЗНАЙТЕ
3
FWIW, я получал ошибку 503, но с тайм-аутом. Оказалось, что для моих ProxyPass*строк я не мог использовать свое фактическое имя сервера и вместо этого мне нужно было использовать либо localhostмой IP-адрес, например, ProxyPass / http://localhost/работал, но ProxyPass / http://example.com/не работал .
inanutshellus
Постановление: stackoverflow.com/a/58111190/1635700
Tejas Tank

Ответы:

129

(Отвечено OP в редактировании вопроса. Преобразовано в ответ вики сообщества. См. Вопрос без ответов, но проблема решена в комментариях (или расширена в чате) )

ОП написала:

Ответ здесь: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

Это ссылка на блог, в которой объясняется:

SELinux на RHEL / CentOS по умолчанию поставляется, поэтому процессы httpd не могут инициировать исходящие соединения, что и пытается сделать mod_proxy.

Если это проблема, ее можно решить, запустив:

 /usr/sbin/setsebool -P httpd_can_network_connect 1

А более точный источник информации см. На https://wiki.apache.org/httpd/13PermissionDenied.

Брайан Томпсетт - 莱恩
источник
3
Думаю, это не единственная причина 503. Потому что SELinux отключен. Возможно, это ошибка конфигурации VirtualHost.
stamaimer
6

это сработало для меня:

ProxyRequests     Off
ProxyPreserveHost On
RewriteEngine On

<Proxy http://localhost:8123>
Order deny,allow
Allow from all
</Proxy>

ProxyPass         /node  http://localhost:8123  
ProxyPassReverse  /node  http://localhost:8123
Даниэль
источник
1
какое имя и расположение файла ??
Manish
2
внезапно сегодня прокси-сервер apache перестал работать только для 443 на локальной машине с IP 1.2.3.4, поэтому изменился с ProxyPass / http:// 1.2.3.4:1234 на ProxyPass / http://localhost:1234 (то же самое сделано для ProxyPassReverse) - я не знаю, почему это произошло сегодня. UnattendedUpdate не устанавливал вещи, связанные с apache, и не запускался сегодня.
eli
@ Удалите файл /etc/apache2/sites-available/your-domain.com-le-ssl.conf или его эквивалент в Centos. и да, изменение my-dom.com: <port> на localhost: <port> тоже сработало для меня на ubunbtu
Nelles 01
6

Немедленно решить проблему, это связано с внутренней безопасностью

Мы, SnippetBucket.com, работающий на корпоративный Linux RedHat, обнаружили, что httpd-сервер не позволяет запускать прокси, ни localhost, ни 127.0.0.1, ни какой-либо другой внешний домен.

Как найти в журнале сервера

[error] (13)Permission denied: proxy: AJP: attempt to connect to
   10.x.x.x:8069 (virtualhost.virtualdomain.com) failed

Журнал аудита обнаружил аналогичную проблему с портом

type=AVC msg=audit(1265039669.305:14): avc:  denied  { name_connect } for  pid=4343 comm="httpd" dest=8069 
scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:port_t:s0 tclass=tcp_socket

Из-за внутренней безопасности Linux по умолчанию, эту причину нужно исправить (временно)

 /usr/sbin/setsebool httpd_can_network_connect 1

Решить постоянную проблему

/usr/sbin/setsebool -P httpd_can_network_connect 1
Теджас Танк
источник
0

В CentOS Linux версии 7.5.1804 мы смогли выполнить эту работу, отредактировав / etc / selinux / config и изменив настройки SELINUX следующим образом:

SELINUX=disabled
Пол Каддихи
источник