Httpd zwraca 503 Usługa niedostępna z mod_proxy dla Tomcat 8

81

Próbuję zintegrować Tomcat z Apache. Moim celem jest przekierowanie wszystkich żądań http://localhost/myappdohttp://localhost:8080

Postępowałem zgodnie z tym przewodnikiem: http://tomcat.apache.org/tomcat-8.0-doc/proxy-howto.html

Mój httpd.confwygląd wygląda tak:

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

Mój server.xml w apache-tomcat wygląda następująco:

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

Teraz, gdy próbuję adres URL http://localhost/myapp, 503 Service Unavailablewyświetla błąd.

Zarówno Tomcat, jak i Apache są uruchomione. Adres URL http://localhost:8080działa poprawnie.

Czy może wystąpić problem z uprawnieniami do plików?

Dla tomcatużytkownika i grupy są root/rooti dla httpd, użytkownik i grupa sąapache/apache

Czy coś mi brakuje, czy robię to źle?

Wersja Httpd to 2.4.6, a wersja Tomcata to 8.0

Dzienniki błędów 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

Rozwiązany!

Odpowiedź jest tutaj: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

user2354302
źródło
3
Dzięki za podpowiedź. Znalazłem ten sysadminsjourney.com/content/2010/02/01/ ... który rozwiązał problem
user2354302
Lepiej usuń opcję ponowienia i
przekroczenia
3
FWIW, otrzymuję błąd 503, ale z przekroczeniem limitu czasu. Okazało się, że dla moich ProxyPass*linii nie mogłem użyć mojej rzeczywistej nazwy serwera i zamiast tego potrzebowałem użyć jednego z localhostmoich adresów IP, np. ProxyPass / http://localhost/Działało, ale ProxyPass / http://example.com/nie.
inanutshellus
Rozwiązane: stackoverflow.com/a/58111190/1635700
Tejas Tank

Odpowiedzi:

129

(Udzielił odpowiedzi OP w edycji pytania. Przekonwertowano na odpowiedź wiki społeczności. Zobacz Pytanie bez odpowiedzi, ale problem rozwiązany w komentarzach (lub rozszerzony na czacie) )

OP napisał:

Odpowiedź jest tutaj: http://sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

Który jest linkiem do bloga, który wyjaśnia:

SELinux na RHEL / CentOS jest domyślnie dostarczany, więc procesy httpd nie mogą inicjować połączeń wychodzących, co jest właśnie tym, co próbuje zrobić mod_proxy.

Jeśli na tym polega problem, można go rozwiązać, uruchamiając:

 /usr/sbin/setsebool -P httpd_can_network_connect 1

Bardziej szczegółowe źródło informacji można znaleźć pod adresem https://wiki.apache.org/httpd/13PermissionDenied

Brian Tompsett - 汤 莱恩
źródło
3
Myślę, że to nie jedyny powód powodujący 503. Ponieważ SELinux jest wyłączony. Może to być błąd konfiguracji VirtualHost.
stamaimer
6

to zadziałało dla mnie:

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
Daniel
źródło
1
jaka jest nazwa i lokalizacja pliku?
Manish,
2
nagle dzisiaj apache proxy przestał działać tylko dla 443 na lokalnej maszynie z IP 1.2.3.4, więc zmieniając się z ProxyPass / http:// 1.2.3.4:1234 na ProxyPass / http://localhost:1234 (tak samo zrobiono dla ProxyPassReverse) - nie wiem, dlaczego tak się dzisiaj stało. UnattendedUpdate nie instalowało rzeczy związanych z Apache i nie działało dzisiaj.
eli
@Manish plik /etc/apache2/sites-available/your-domain.com-le-ssl.conf lub odpowiednik Centos. i tak zmieniając my-dom.com: <port> na localhost: <port> też działało dla mnie na ubunbtu
Nelles
6

Natychmiast rozwiąż problem, jest to związane z bezpieczeństwem wewnętrznym

My, SnippetBucket.com pracujący dla Enterprise Linux RedHat, stwierdziliśmy, że serwer httpd nie zezwala na działanie serwera proxy, ani lokalnego hosta, ani 127.0.0.1, ani żadnej innej domeny zewnętrznej.

Jak zbadać w znalezionym dzienniku serwera

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

Dziennik kontroli wykrył podobny problem z portem

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

Ze względu na wewnętrzne domyślne bezpieczeństwo Linuksa ta przyczyna, teraz do naprawienia (tymczasowa)

 /usr/sbin/setsebool httpd_can_network_connect 1

Rozwiąż stały problem

/usr/sbin/setsebool -P httpd_can_network_connect 1
Tejas Tank
źródło
0

W CentOS Linux w wersji 7.5.1804 mogliśmy to zrobić, edytując / etc / selinux / config i zmieniając ustawienia SELINUX w następujący sposób:

SELINUX=disabled
Paul Cuddihy
źródło