无法在 Docker 中使用 httpd ajp 代理访问 Tomcat servlet

无法在 Docker 中使用 httpd ajp 代理访问 Tomcat servlet

Docker、httpd 和 tomcat 对我来说都是新的。

我想做的事:通过httpd ajp反向代理访问tomcat servlet。

我在同一个桥接网络下创建了两个容器,一个运行 httpd,另一个运行 tomcat。

问题:我无法通过 httpd 访问 tomcat。Httpd 返回 403 错误。如果我将其暴露给主机,我可以通过端口 8080 访问。我读了很多文章,但不明白我做错了什么。根据我的理解,当前配置应该可以工作,但我肯定遗漏了一些东西。

错误页面截图

请指点我做错了什么。

我的配置和 dockerfile 请参阅Git 存储库在这里。我首先通过创建镜像来运行容器,然后按照以下步骤运行

# Start web container
docker run -dit --name httpd.container -p 80:80 --network extope-network httpd-101-image
# Start AP container
docker run -dit --name tomcat.container -p 8080:8080 --network extope-network --add-host=host.docker.internal:host-gateway tomcat-101-image

答案1

从 httpd 配置中的机密中删除引号。

ProxyPass "/docs" "ajp://tomcat.container:8009/docs" secret=test_ajp_secret
ProxyPass "/manager/" "ajp://tomcat.container:8009/manager/" secret=test_ajp_secret

之后它就可以工作了。

答案2

您的 server.xml 将流量重定向到端口 8443,但是,

  1. 不处理该端口(处理程序已被注释掉)
  2. 该容器不接受该端口的流量。

在 httpd.conf 中我看到“Include conf/httpd_extope.conf”,但没有 httpd_extope.conf。http_proxy.conf 尝试在端口 8009 上联系容器,上述两条注释也适用于该端口。

相关内容