"ajp_ilink_receive failed" 尝试通过 AJP 将非 Docker Apache 连接到 Docker Tomcat 时
"ajp_ilink_receive failed" when trying to connect a non-Docker Apache to a Docker Tomcat through AJP
我在通过 AJP 将 Apache(不是 docker 容器中的 运行)路由到 Docker 容器中的 Tomcat 运行ning 时遇到问题。 Apache 和 Tomcat 的配置在 运行 没有 Docker 的情况下工作,但是一旦我 运行 Tomcat 在 docker 它停止工作:那里是我在端口配置中缺少的东西是我的猜测。
除了以下配置外,我还尝试了 network_mode: docker-compose 中的主机。这允许我的请求通过,但我不能使用它,因为这也必须 运行 在非 linux 主机上。
请帮助我找出将非 Docker Apache 连接到 Docker-Tomcat.
时需要做哪些不同的事情
这是我的 error.log 来自 Apache
[Mon Mar 01 14:03:42.650251 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] [client 127.0.0.1:52788] AH00992: ajp_read_header: ajp_ilink_receive failed
[Mon Mar 01 14:03:42.650278 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] (120006)APR does not understand this error code: [client 127.0.0.1:52788] AH00878: read response failed from 127.0.0.1:8009 (staffan)
这是我的 apache 配置的 proxypass 部分
ProxyPass / ajp://staffan:8009/ timeout=600 secret=mySecret
ProxyPassReverse / ajp://staffan:8009/ secret=mySecret
这是tomcat中server.xml对应的部分
<Connector port="8009"
protocol="AJP/1.3"
redirectPort="8443"
asyncTimeout="60000"
maxPostSize="52428800"
allowedRequestAttributesPattern=".*"
secret="mySecret"/>
Docker 文件(使用 #docker build -t my-docker 构建。)
FROM tomcat:9
ENV JPDA_ADDRESS=*:5005
ENV JPDA_TRANSPORT=dt_socket
WORKDIR /
COPY ./deploy/server.xml /usr/local/tomcat/conf/
COPY ./deploy/context.xml /usr/local/tomcat/conf/
COPY ./deploy/web.xml /usr/local/tomcat/conf/
COPY ./build/libs/localhost.war /usr/local/tomcat/webapps/.
CMD ["catalina.sh", "jpda", "run"]
和docker组成
version: "3.8"
services:
my-development:
image: my-docker
restart: unless-stopped
mem_limit: 16gb
ports:
- 8009:8009
- 9080:9080
- 5005:5005
volumes:
- my-io:/io
- logs:/logs
volumes:
my-io:
external: true
name: my-io
logs:
name: logs
问题出在网络上;你必须告诉 Tomcat 使用地址属性
监听所有地址(因为 Apache 在容器之外)
<Connector port="8009"
protocol="AJP/1.3"
asyncTimeout="60000"
maxPostSize="52428800"
allowedRequestAttributesPattern=".*"
packetSize="32768"
secret="mySecret"
address="0.0.0.0"/>
我在通过 AJP 将 Apache(不是 docker 容器中的 运行)路由到 Docker 容器中的 Tomcat 运行ning 时遇到问题。 Apache 和 Tomcat 的配置在 运行 没有 Docker 的情况下工作,但是一旦我 运行 Tomcat 在 docker 它停止工作:那里是我在端口配置中缺少的东西是我的猜测。
除了以下配置外,我还尝试了 network_mode: docker-compose 中的主机。这允许我的请求通过,但我不能使用它,因为这也必须 运行 在非 linux 主机上。
请帮助我找出将非 Docker Apache 连接到 Docker-Tomcat.
时需要做哪些不同的事情这是我的 error.log 来自 Apache
[Mon Mar 01 14:03:42.650251 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] [client 127.0.0.1:52788] AH00992: ajp_read_header: ajp_ilink_receive failed
[Mon Mar 01 14:03:42.650278 2021] [proxy_ajp:error] [pid 4603:tid 140128592954944] (120006)APR does not understand this error code: [client 127.0.0.1:52788] AH00878: read response failed from 127.0.0.1:8009 (staffan)
这是我的 apache 配置的 proxypass 部分
ProxyPass / ajp://staffan:8009/ timeout=600 secret=mySecret
ProxyPassReverse / ajp://staffan:8009/ secret=mySecret
这是tomcat中server.xml对应的部分
<Connector port="8009"
protocol="AJP/1.3"
redirectPort="8443"
asyncTimeout="60000"
maxPostSize="52428800"
allowedRequestAttributesPattern=".*"
secret="mySecret"/>
Docker 文件(使用 #docker build -t my-docker 构建。)
FROM tomcat:9
ENV JPDA_ADDRESS=*:5005
ENV JPDA_TRANSPORT=dt_socket
WORKDIR /
COPY ./deploy/server.xml /usr/local/tomcat/conf/
COPY ./deploy/context.xml /usr/local/tomcat/conf/
COPY ./deploy/web.xml /usr/local/tomcat/conf/
COPY ./build/libs/localhost.war /usr/local/tomcat/webapps/.
CMD ["catalina.sh", "jpda", "run"]
和docker组成
version: "3.8"
services:
my-development:
image: my-docker
restart: unless-stopped
mem_limit: 16gb
ports:
- 8009:8009
- 9080:9080
- 5005:5005
volumes:
- my-io:/io
- logs:/logs
volumes:
my-io:
external: true
name: my-io
logs:
name: logs
问题出在网络上;你必须告诉 Tomcat 使用地址属性
监听所有地址(因为 Apache 在容器之外) <Connector port="8009"
protocol="AJP/1.3"
asyncTimeout="60000"
maxPostSize="52428800"
allowedRequestAttributesPattern=".*"
packetSize="32768"
secret="mySecret"
address="0.0.0.0"/>