Добавьте mod_rewrite в образ Docker httpd:alpine

Честно говоря, у меня почти нет опыта работы с 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 (или какого-либо модуля в этом отношении).

Спасибо всем большое за вашу поддержку!

1 ответ

Решение

mod_rewrite по умолчанию устанавливается с 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. Для этого вам нужно сделать 2 вещи:

  • В httpd.conf включите mod_rewrite, раскомментировав строку:

    LoadModule модули rewrite_module /mod_rewrite.so

  • В httpd.conf измените AllowOverride для вашего рабочего каталога на All (не меняйте каждый AllowOverride, потому что это проблема безопасности)

    AllowOverride All

Рекомендуется загрузить httpd.conf из контейнера, изменить эти значения, а затем загрузить новый httpd.conf при создании образа в тот же каталог:

например

  • извлечь httpd.confdocker run --rm httpd: 2.4 cat /usr/local/apache2/conf/httpd.conf> my-httpd.conf

  • загрузите новый процесс сборки httpd.confon:COPY./my-httpd.conf /usr/local/apache2/conf/httpd.conf

Другие вопросы по тегам