为什么 Apache 没有代理到 Tomcat?

为什么 Apache 没有代理到 Tomcat?

Apache 2.4 和 Tomcat 9 安装在同一台 Ubuntu 20.04 服务器上。我正在尝试将 Apache 设置为 Tomcat 的反向代理。此配置在 Apache 2.4/Tomcat 7/Ubuntu 16.04 系统上已经运行正常,但我无法将其传输到新服务器。

mod_proxymod_proxy_ajp在 Apache 上启用。Proxy/ReverseProxy 指令包含在站点配置文件中mysite.conf,它们与旧版运行系统上的指令相同。

Apache 本身可以工作。如果我将默认站点配置替换为mysite.conf,我成功获得了 Ubuntu Apache2 默认页面。

在 Tomcat 的server.xml文件中,我取消了 AJP 连接器的注释并对其进行了稍微的编辑:

    <Connector protocol="AJP/1.3"
               port="8009"
               redirectPort="8443"
               enableLookups="false"
               URIEncoding="UTF-8" />

这也与旧的运行系统上的配置相同。

Tomcat 本身可以工作。如果我访问指定端口 8080 的服务器,我会得到它所服务的 Web 应用程序。错误出在 Apache/Tomcat 连接中的某个地方。

当我尝试通过 Apache 进行连接(即mysite.conf启用)时,连接导致 Apache 出现 503“服务不可用”错误。文件中出现以下几行/var/log/apache2/error.log

[Fri Mar 26 13:33:12.507582 2021] [proxy_ajp:error] [pid 349130] (70007)The timeout specified has expired: AH01030: ajp_ilink_receive() can't receive header
[Fri Mar 26 13:33:12.507633 2021] [proxy_ajp:error] [pid 349130] [client 10.11.12.13:53812] AH00992: ajp_read_header: ajp_ilink_receive failed
[Fri Mar 26 13:33:12.507643 2021] [proxy_ajp:error] [pid 349130] (70007)The timeout specified has expired: [client 10.11.12.13:53812] AH00878: read response failed from 127.0.0.1:8009 (localhost)

我搜索了这些错误,但我能找到的唯一建议(例如,ProxyTimeout 600在 Apache 中设置mysite.conf)对问题没有任何影响。

我是否遗漏了什么?我该如何进一步排除故障?

答案1

两件事情:

  1. redirectPort="8443"Tomcat 中 AJP 连接器的属性用于server.xmlSSL 连接。由于我仍在处理基本连接,因此尚未启用 SSL,因此这应该是redirectPort="8080"

  2. 在我使用的两个 Tomcat 版本之间,secretRequiredAJP 连接器的属性从默认的 更改false为默认的true。由于我没有使用代理连接发送密码,因此失败了。当我终于想起检查 Tomcat 日志时(在 Ubuntu 上),我发现了这一点/var/log/tomcat9/catalina.{date}.log

以下 AJP 配置有效并允许我通过 Apache 反向代理加载 web 应用程序:

<Connector protocol="AJP/1.3"
           port="8009"
           redirectPort="8080"
           enableLookups="false"
           URIEncoding="UTF-8"
           secretRequired="false" />

相关内容