添加 mod_rewrite 到 Docker 图片 httpd:alpine

Add mod_rewrite to Docker image httpd:alpine

老实说,我几乎没有使用过 Alpine Linux,但我喜欢它的方法,因此想改变它。我也是 Docker 的新手,所以如果这是一个 "stupid" 问题,请多多包涵。

我想要实现的是在 httpd:alpine 图像的基础上构建并扩展 HTTPd 以满足我的需要。

这将包括激活 mod_rewrite 模块并将自定义 .htaccess 复制到图像中。

这是我目前的情况:

FROM httpd:alpine

# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/

RUN apk update
RUN apk upgrade
RUN apk add apache2-utils
RUN a2enmod rewrite
RUN rc-service apache2 restart

我现在的问题是,我经常收到 "a2enmod not found" 错误,我不知道如何解决。那可能是因为 a2enmod 是纯粹的 Debian/Ubuntu/... 东西,但我不知道激活 mod_rewrite(或与此相关的任何模块)的任何替代方法。

非常感谢大家的支持!

mod_rewrite在alpine中默认和apache一起安装,所以不需要重新安装。下面是在 Alpine 中启用 mod_rewrite 的方法:

FROM httpd:alpine

# Copy .htaccess into DocumentRoot
COPY ./.htaccess /var/www/html/

RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf

RUN { \
  echo 'IncludeOptional conf.d/*.conf'; \
} >> /usr/local/apache2/conf/httpd.conf \
  && mkdir /usr/local/apache2/conf.d

我想您想要有效的 .htaccess 重写机制。 为此,您需要做两件事:

  • 在 httpd.conf 中通过取消注释行启用 mod_rewrite:

    LoadModule rewrite_module modules/mod_rewrite.so

  • 在 httpd.conf 中将工作目录的 AllowOverride 更改为全部(不要更改每个 AllowOverride,因为这是安全问题)

    AllowOverride All

最好从容器下载 httpd.conf,更改此值,然后在将映像构建到同一目录时上传新的 httpd.conf:

例如

  • 提取httpd.conf docker 运行 --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf

  • 在构建过程中上传新的httpd.conf: 复制 ./my-httpd.conf /usr/local/apache2/conf/httpd.conf