You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache反向代理无法访问已暴露端口的Docker容器问题排查求助

Apache反向代理无法访问已暴露端口的Docker容器问题排查求助

各位大佬,我折腾了好久的Apache反向代理问题一直解决不了,求帮忙分析下!

情况是这样的:我在CentOS服务器上跑着正常的Apache/httpd服务,已经托管了几个网站,Apache监听80和443端口。SELinux已经禁用了,iptables也开放了80和8080端口允许所有接口访问。

现在需要新增一个网站,这个网站是打包成Docker Compose的LAMP应用,内部也是用Apache的。本来以为很简单,只要让外部的Apache把80端口的请求反向代理到Docker暴露的8080端口就行,预期的流程是:
[Internet] -> 外部Apache(:80) -> ProxyPass -> Docker(:8080) -> 内部Apache(:80) -> 网站内容

但不管怎么配置,就是不行!外部Apache能正常监听80端口,也能看到进来的请求,但代理后的请求就是到不了Docker暴露的服务。

外部Apache的日志里报错:

[proxy_http:error] [pid 11669] (70007)The timeout specified has expired: [client xxx:59517] AH01102: error reading status line from remote server localhost:8080

而Docker内部的Apache日志里完全没有记录,说明请求根本没传进去。

我做了几个测试排除问题:

  • 临时停掉外部Apache,让Docker直接映射ports: 80:80,这时候网站能正常访问,说明Docker本身的应用是没问题的;
  • 用nc -zv localhost 8080测试本地端口,结果能正常连接:
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 127.0.0.1:8080.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

这应该能排除防火墙的问题,要是防火墙拦截的话Ncat应该连不上;

  • 从家里的电脑直接访问服务器的8080端口也能正常打开网站,但访问80端口就不行,所以问题肯定出在本地Apache代理到8080这一步。

下面是我的配置文件:

Docker Compose配置

# docker-compose.yml
version: '3'
services:
  php:
    image: php:7.2-apache
    ports:
      - 8080:80
    volumes:
      - ./html:/var/www/html # Contains index.php

外部Apache虚拟主机配置

# apache2 running outside of Docker
# test.local-vhost.conf
LoadModule proxy_module      modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so

<VirtualHost *:80>
    ServerName example.com
    ProxyPreserveHost On
    ProxyPass         / http://localhost:8080
    ProxyPassReverse  / http://localhost:8080
</VirtualHost>

有没有大佬能帮我看看哪里出问题了?

备注:内容来源于stack exchange,提问作者WackGet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:50:28