我开始慢慢地抓狂。我不敢相信这么简单的事情会让我这么头疼。我基本上想实现的是让 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/portainer我400: 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。