将mod_rewrite添加到Docker镜像httpd:alpine

时间:2018-04-13 05:16:08

标签: docker mod-rewrite apache2 alpine apache2-module

说实话,我几乎没有使用Alpine Linux的经验,但我喜欢它的方法,因此想要改变它。我对Docker也比较陌生,所以如果这是一个"愚蠢的"问题

我想要实现的是在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(或任何模块)的任何替代方法。

非常感谢大家的支持!

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

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

    LoadModule rewrite_module modules / mod_rewrite.so

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

    允许全部覆盖

从建筑物中下载httpd.conf,更改此值,然后在将映像构建到同一目录时上传新的httpd.conf是一个好习惯:

例如

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

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