添加 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
老实说,我几乎没有使用过 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