【问题标题】:Httpd returning 503 Service Unavailable with mod_proxy for Tomcat 8Httpd 返回 503 Service Unavailable with mod_proxy for Tomcat 8
【发布时间】:2014-10-27 23:08:12
【问题描述】:

我正在尝试将 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 都已启动并正在运行。 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/

【问题讨论】:

  • 感谢您的提示。我发现这个sysadminsjourney.com/content/2010/02/01/… 解决了这个问题
  • 最好去掉重试和超时选项并检查
  • FWIW,我收到 503 错误但超时。结果发现,对于我的ProxyPass* 行,我不能使用我的实际服务器名,而是需要使用localhost 或我的IP 地址,例如ProxyPass / http://localhost/ 有效,但 ProxyPass / http://example.com/ 无效。

标签: apache tomcat


【解决方案1】:

(由 OP 在问题编辑中回答。转换为社区 wiki 答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat)

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

【讨论】:

  • 我认为这不是导致 503 的唯一原因。因为 SELinux 已禁用。可能是 VirtualHost 配置错误。
  • 我遇到了同样的问题,花了 3 个小时试图解决它,直到我读到你的答案。 SELinux 再次来袭!
【解决方案2】:

通过在 apache 中编辑我的 *.conf 文件,这对我有用:

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

【讨论】:

  • 文件名和位置是什么??
  • 今天突然 apache 代理停止在本地机器上为 443 工作,IP 为 1.2.3.4,所以从 ProxyPass / http:// 1.2.3.4:1234 更改为 ProxyPass / http://localhost:1234(同样为 ProxyPassReverse 完成) - 我不知道为什么这发生在今天。 UnattendedUpdate 没有安装 apache 相关的东西,今天也没有运行。
  • @Manish 文件 /etc/apache2/sites-available/your-domain.com-le-ssl.conf 或 Centos 等效文件。是的,将 my-dom.com: 更改为 localhost: 在 ubunbtu 上也对我有用
【解决方案3】:

在 CentOS Linux 版本 7.5.1804 上,我们可以通过编辑 /etc/selinux/config 并像这样更改 SELINUX 的设置来完成这项工作:

SELINUX=disabled

【讨论】:

  • 禁用安全不会解决任何问题。
【解决方案4】:

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

我们 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-12
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多