Apache 2.4 和 Tomcat 9 安装在同一台 Ubuntu 20.04 服务器上。我正在尝试将 Apache 设置为 Tomcat 的反向代理。此配置在 Apache 2.4/Tomcat 7/Ubuntu 16.04 系统上已经运行正常,但我无法将其传输到新服务器。
mod_proxy
并mod_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
两件事情:
redirectPort="8443"
Tomcat 中 AJP 连接器的属性用于server.xml
SSL 连接。由于我仍在处理基本连接,因此尚未启用 SSL,因此这应该是redirectPort="8080"
在我使用的两个 Tomcat 版本之间,
secretRequired
AJP 连接器的属性从默认的 更改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" />