禁止

禁止

有人在这里成功设置了容器内的 apache 并允许从主机访问服务器状态吗?我已经尝试在 docker 中使用 --add-host 参数,然后在配置文件中允许该主机,但我仍然收到 Forbidden 错误消息

服务器状态的 httpd 配置文件设置如下:

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from mainserver
</Location>

我正在用以下命令创建 docker 容器: docker run -e 80:80 httpdimage /usr/sbin/httpd -DFOREGROUND

然后,我使用以下 curl 命令从主机进行测试: curl http://localhost/server-status

然后我收到错误消息:

禁止

您无权访问此服务器上的 /server-status。

答案1

这里可能发生一些事情。

首先,从你的容器的角度来看,你的主机有你的docker0网桥的地址;这是你容器内部的默认路由,因此你可以像这样获取它:

host_address=$(ip route | awk '$1 == "default" {print $3}')

你可以ENTRYPOINT在启动容器时用脚本或其他东西将其替换到 Apache 配置中,得到如下内容:

<Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 172.47.42.1
</Location>

如果您运行的是 Apache 2.4,则此方法无效。在 Apache 2.4 中,AllowDeny指令已被替换为较新的语法,因此您实际上需要:

<Location /server-status>
    SetHandler server-status
    Require ip 172.17.42.1
</Location>

这就是最终在我的系统上运行的程序。

相关内容