Apache 反向代理将 URL 重新路由到本地网络中的 docker 容器

Apache 反向代理将 URL 重新路由到本地网络中的 docker 容器

我开始慢慢地抓狂。我不敢相信这么简单的事情会让我这么头疼。我基本上想实现的是让 http://maris-minipc/portainer 指向 http://maris-minipc:9000。就是这样。

我有以下设置:

  • 带有自托管 Portainer 的 Docker 容器,并在端口 9000 上公开。
  • Apache 网络服务器可在系统范围内使用,并可用于托管其他东西。
  • 带有集成 DNS 服务器(dnsmasq)的 Pihole。

URL http://maris-minipc 在整个网络范围内均可访问,因为我通常使用它来访问前面提到的 apache web 服务器上托管的内容(这意味着我的 DNS 服务器工作正常)。然后,我刚刚创建了一个新的Apache 配置文件内容如下:

<VirtualHost *:80>
    ServerName maris-minipc
    ProxyPreserveHost On

    ProxyPass /portainer http://maris-minipc:9000/
    ProxyPassReverse /portainer http://maris-minipc:9000/

    ErrorLog test/error.log
    CustomLog test/access.log combined
</VirtualHost>

每当我访问 URL 时http://maris-minipc/portainer400: Bad Request出于某种原因得到了。这至少意味着代理正在运行,否则我会得到

Not Found
The requested URL was not found on this server.

Apache/2.4.55 (Ubuntu) Server at maris-minipc Port 80

我还尝试将 URL 重定向到外部网站,并且成功了。

如果你对我的/etc/hosts文件:

127.0.0.1 localhost
127.0.1.1 Maris-MiniPC

什么可能阻碍了我本地网络中的路由?我需要在 docker 中设置某些特定的东西吗,因为我找不到任何东西?

编辑1: 获取代理调试日志

[Mon Sep 11 18:44:38.419683 2023] [proxy:trace2] [pid 2059141] mod_proxy.c(884): [client 10.10.10.3:51982] AH03461: attempting to match URI path '/ha' against prefix '/ha' for proxying
[Mon Sep 11 18:44:38.419803 2023] [proxy:trace1] [pid 2059141] mod_proxy.c(1001): [client 10.10.10.3:51982] AH03464: URI path '/ha' matches proxy handler 'proxy:http://maris-minipc:8123/'
[Mon Sep 11 18:44:38.419956 2023] [proxy:trace2] [pid 2059141] proxy_util.c(2340): [client 10.10.10.3:51982] http: found worker http://maris-minipc:8123/ for http://maris-minipc:8123/
[Mon Sep 11 18:44:38.419983 2023] [proxy:debug] [pid 2059141] mod_proxy.c(1506): [client 10.10.10.3:51982] AH01143: Running scheme http handler (attempt 0)
[Mon Sep 11 18:44:38.420000 2023] [proxy:debug] [pid 2059141] proxy_util.c(2538): AH00942: http: has acquired connection for (maris-minipc:8123)
[Mon Sep 11 18:44:38.420086 2023] [proxy:debug] [pid 2059141] proxy_util.c(2596): [client 10.10.10.3:51982] AH00944: connecting http://maris-minipc:8123/ to maris-minipc:8123
[Mon Sep 11 18:44:38.420460 2023] [proxy:debug] [pid 2059141] proxy_util.c(2819): [client 10.10.10.3:51982] AH00947: connected / to maris-minipc:8123
[Mon Sep 11 18:44:38.420599 2023] [proxy:trace2] [pid 2059141] proxy_util.c(3257): http: fam 2 socket created to connect to maris-minipc:8123
[Mon Sep 11 18:44:38.420830 2023] [proxy:debug] [pid 2059141] proxy_util.c(3291): AH02824: http: connection established with 127.0.1.1:8123 (maris-minipc:8123)
[Mon Sep 11 18:44:38.420909 2023] [proxy:debug] [pid 2059141] proxy_util.c(3480): AH00962: http: connection complete to 127.0.1.1:8123 (maris-minipc)
[Mon Sep 11 18:44:38.426673 2023] [proxy:debug] [pid 2059141] proxy_util.c(2554): AH00943: http: has released connection for (maris-minipc:8123)

答案1

各位,我成功解决了。感谢@u1686_gravity 的帮助!

某些容器需要明确的规则才能与代理服务器通信(在容器配置中配置)。除此之外,它们中的大多数都使用 Websockets,因此需要额外的代理服务器指令来支持这一点。

Pihole 中有一个小功能/错误,导致我无法使用子域名。Pihole 在后台使用 dnsmasq。在 Pihole 中创建 A 记录 (test.home) 意味着它不支持子域名通配符 (*.test.home)。解决方案是手动将其添加到 dnsmasq。

相关内容