Tomcat 8的Httpd返回503服务不可用mod_proxy


80

我正在尝试将Tomcat与Apache集成。我的目标是将所有请求重定向 http://localhost/myapphttp://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

我在apache-tomcat中的server.xml看起来像这样:

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

现在,当我尝试url时http://localhost/myapp,它给出了503 Service Unavailable错误。

Tomcat和Apache都已启动并正在运行。该网址http://localhost:8080可以正常运行。

文件权限会出现问题吗?

对于tomcat用户和组分别是root/roothttpd,对于用户和组为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/


3
感谢您的提示。我找到了这个sysadminsjourney.com/content/2010/02/01/…,它解决了该问题
user2354302 2014年

最好您删除重试和超时选项并检查
KNOWARTH 2014年

3
FWIW,我收到503错误,但超时。原来,对于我的ProxyPass*线路,我不能使用我的实际服务器名,而是需要使用localhost我的IP地址,例如可以,ProxyPass / http://localhost/ProxyPass / http://example.com/不能使用。
inanutshellus

Answers:


128

(由OP在问题编辑中回答。转换为社区Wiki答案。请参阅无答案的问题,但问题已在评论中解决(或扩展为聊天)

OP写道:

答案在这里:http : //sysadminsjourney.com/content/2010/02/01/apache-modproxy-error-13permission-denied-error-rhel/

这是博客的链接,它说明:

默认情况下,RHEL / CentOS上的SELinux出厂,因此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代理停止在IP 1.2.3.4的本地计算机上仅在443上工作,因此从更改ProxyPass / http:// 1.2.3.4:1234ProxyPass / http://localhost:1234 (对于ProxyPassReverse也是如此)-我不知道为什么今天会发生这种情况。UnattendedUpdate没有安装与Apache相关的内容,并且今天没有运行。
eli

@Manish文件/etc/apache2/sites-available/your-domain.com-le-ssl.conf或Centos等效文件。是的,将my-dom.com:<port>更改为localhost:<port>在ubunbtu上也对我有用
Nelles

5

立即解决问题,与内部安全性有关

我们为企业linux RedHat工作的SnippetBucket.com发现httpd服务器不允许运行代理,本地主机或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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.