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

如何在httpd Docker镜像中禁用HTTP协议?

解决方案

你当前的HTTP可以访问是因为官方httpd镜像默认配置监听80端口,即使你没有做80端口的端口映射,容器内部默认仍开放80端口服务,同网络下的服务或宿主机本地可直接访问。要彻底禁用HTTP协议,可以选择以下两种方案:

方案1:完全禁用Apache 80端口监听(彻底关闭HTTP服务)

直接修改Apache主配置,注释掉80端口的监听规则即可。
修改你的Dockerfile,在现有RUN sed指令后新增一条修改配置的命令,修改后的Dockerfile参考如下:

ARG version=2.4.48-alpine

FROM httpd:$version

LABEL version=1.0

COPY ./public_html/ /usr/local/apache2/htdocs/

# 配置HTTPS相关模块
COPY ./cert/srv.crt /usr/local/apache2/conf/
COPY ./cert/srv.key /usr/local/apache2/conf/

RUN sed -i \
    -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \
    -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \
    -e 's/^#\(LoadModule .*mod_socache_shmcb.so\)/\1/' \
    -e 's/^Listen 80/#Listen 80/' \
    conf/httpd.conf

EXPOSE 443/tcp

修改完成后重新构建镜像,删除旧容器重新启动即可,此时Apache只会监听443端口,完全不响应HTTP请求。

方案2:HTTP请求自动跳转HTTPS(更推荐普通站点使用)

如果需要兼容用户直接输入域名默认走HTTP的场景,不用禁用HTTP,而是配置所有80端口的请求自动301跳转到HTTPS地址,操作如下:

  1. 开启mod_rewrite模块,在原有sed命令中新增开启rewrite模块的规则
  2. 新增80端口的虚拟主机配置,配置跳转规则
    修改后的Dockerfile参考:
ARG version=2.4.48-alpine

FROM httpd:$version

LABEL version=1.0

COPY ./public_html/ /usr/local/apache2/htdocs/

# 配置HTTPS相关模块
COPY ./cert/srv.crt /usr/local/apache2/conf/
COPY ./cert/srv.key /usr/local/apache2/conf/

RUN sed -i \
    -e 's/^#\(Include .*httpd-ssl.conf\)/\1/' \
    -e 's/^#\(LoadModule .*mod_ssl.so\)/\1/' \
    -e 's/^#\(LoadModule .*mod_socache_shmcb.so\)/\1/' \
    -e 's/^#\(LoadModule .*mod_rewrite.so\)/\1/' \
    conf/httpd.conf

# 新增HTTP跳转HTTPS规则
RUN echo '\
<VirtualHost *:80>\
    ServerName mydomain\
    Redirect permanent / https://mydomain/\
</VirtualHost>\
' >> conf/httpd.conf

EXPOSE 80/tcp 443/tcp

配置完成后启动容器时需要同时映射80端口:docker run -d -p 80:80 -p 443:443 webserver,此时用户输入mydomain会自动跳转到HTTPS地址。

额外校验操作

容器启动后可以进入容器内部执行netstat -tunlp查看监听的端口,确认仅开启了你需要的端口即可。

内容的提问来源于stack exchange,提问作者Nullndr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:27:04