将 mod_rewrite 添加到 Docker 映像 httpd:alpine
Posted
技术标签:
【中文标题】将 mod_rewrite 添加到 Docker 映像 httpd:alpine【英文标题】:Add mod_rewrite to Docker image httpd:alpine 【发布时间】:2018-09-23 09:15:23 【问题描述】:老实说,我几乎没有使用 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 (或任何模块)的任何替代方法。
非常感谢大家的支持!
【问题讨论】:
这对我有帮助,我同意在 RUN a2enmod 中重写 dockerfile 并工作。 【参考方案1】: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
【讨论】:
非常感谢您的快速回复!我完全按照您在答案中提供的更改进行了更改,但仍然无法使其正常工作。可以构建 docker 镜像并且可以运行容器,但是重写规则不起作用。我认为这是缺少“AllowOverride”指令吗?如果是这样,我将如何通过 sed 激活它?为了进一步参考,我将把我的 .htaccess 的内容放在这里:Options +FollowSymLinks
RewriteEngine on
RewriteRule ^(.*)$ https://www.youtube.com [R=301,L]
(是的,我现在想把对我服务器的调用转发到 youtube。)
@Archivar 该帖子没有解决您的问题,因为我认为它对您不起作用。请不要将其标记为正确答案。
@Archivar yes 以上 DockerFile 对我不起作用。请不要标记为正确。
也许在 2018 年 4 月一切正常,也许从那以后情况发生了变化,也许你不应该简单地复制和粘贴,甚至不去尝试了解发生了什么——但也许答案就是错误的。大声笑【参考方案2】:
我想你想要一个有效的 .htaccess 重写机制。 为此,您需要做两件事:
在 httpd.conf 中通过取消注释行启用 mod_rewrite:
LoadModule rewrite_module modules/mod_rewrite.so
在 httpd.conf 中将工作目录的 AllowOverride 更改为 All(不要更改每个 AllowOverride,因为这是安全问题)
AllowOverride All
从容器中下载 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
【讨论】:
以上是关于将 mod_rewrite 添加到 Docker 映像 httpd:alpine的主要内容,如果未能解决你的问题,请参考以下文章
PHP 使用mod_rewrite将单个页面重定向到HTTPS
使用 Mod_Rewrite 将 ROOT 重写到另一个路径
使用 Mod_rewrite 将 HTTP 重定向到 HTTPS