如何使用Apache httpd作为Docker Compose和“whoami”容器的反向代理?

of1yzvn4  于 2023-06-06  发布在  Apache
关注(0)|答案(1)|浏览(195)

我正在尝试设置一个Docker Compose环境,其中包括一个Apache httpd服务器和一个“whoami”容器,我想使用Apache httpd服务器作为反向代理来将请求路由到“whoami”容器。
下面是我的docker-compose.yml文件:

version: '3'

services:
  httpd:
    image: httpd:latest
    ports:
      - "80:80"
    volumes:
      - ./httpd.conf:/usr/local/apache2/conf/httpd.conf:ro

  whoami:
    image: containous/whoami
    ports:
      - "8080:80"

下面是我的httpd.conf文件:

LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so

ServerName 127.0.0.1
Listen *:80

<Proxy balancer://whoami>
    BalancerMember http://whoami-replica-1:80
    ProxySet lbmethod=byrequests
</Proxy>

ProxyPass / balancer://whoami
ProxyPassReverse / balancer://whoami

当我运行docker-compose up时,我可以访问http://localhost:8080的“whoami”容器,但是当我试图访问http://localhost的Apache httpd服务器时,我得到httpd退出,没有任何日志。
我做错了什么?如何在Docker Compose中配置Apache httpd作为“whoami”容器的反向代理?

nxagd54h

nxagd54h1#

httpd正在退出,因为您的httpd.conf无效。您正在 * 替换 * 默认的httpd.conf,这意味着您需要处理强制配置,例如加载适当的安全模块(例如mod_unixd)。
更好的方法是从httpd镜像复制httpd.conf

docker run httpd:latest cat /usr/local/apache2/conf/httpd.conf > httpd.conf

然后修改它以满足您的需要。
我只能通过在strace的控制下本地运行Apache来确定问题:

$ sudo strace -e trace=write -s 1024 httpd -DFOREGROUND -f $PWD/httpd.conf
write(2, "[Tue Jun 06 06:00:33.356982 2023] [core:crit] [pid 755528:tid 755528] AH00136: Server MUST relinquish startup privileges before accepting connections.  Please ensure mod_unixd or other system security module is loaded.\n", 219) = 219
write(2, "AH00016: Configuration Failed\n", 30) = 30
+++ exited with 1 +++

搜索该错误消息会导致this 2.2 to 2.4 upgrade documentation,其中提到了所需的mod_unixd模块。
我无法想出任何httpd的命令行调用,使其以有用的方式发出此错误。

相关问题