やりたいこと
Docker の php:5.6-apache で、.htaccess を有効にしたいです。mod_rewrite を有効にしたい、と言えますね。
実現するには
の通りにすればできました!
今回、実現するにあたって、学んだことをノートします。
Docker の php:5.6-apache で、.htaccess を有効にするまでにやったこと
php:5.6-apache の Dockerfile で、次のようにしました。
- a2enmod rewrite を実行し、mod_rewrite を有効にした。
− mod_rewrite を適用する設定を加えた /etc/apache2/sites-available/000-default.conf に差し替えた。
他に、今回のやりたいことではありませんが、次のことも行いました。
- Dockerfile を書くベスト・プラクティス — Docker-docs-ja 1.11.0 ドキュメント の「推奨する apt-get の使い方」を取り入れた。
その際、library/php – Docker Hub の PHP Core Extensions も参考にした。
From php:5.6-apache
RUN apt-get update \
&& docker-php-ext-install pdo_mysql mysqli mbstring \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& a2enmod rewrite
COPY ./php.ini /usr/local/etc/php/
COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf
$ git diff appweb/Dockerfile diff --git a/docker-l-a24-m56-p56/appweb/Dockerfile b/docker-l-a24-m56-p56/appweb/Dockerfile index 34e7a8d..c3a3e42 100644 --- a/docker-l-a24-m56-p56/appweb/Dockerfile +++ b/docker-l-a24-m56-p56/appweb/Dockerfile @@ -1,3 +1,8 @@ From php:5.6-apache -RUN docker-php-ext-install pdo_mysql mysqli mbstring +RUN apt-get update \ +&& docker-php-ext-install pdo_mysql mysqli mbstring \ +&& apt-get clean \ +&& rm -rf /var/lib/apt/lists/* \ +&& a2enmod rewrite COPY ./php.ini /usr/local/etc/php/ +COPY ./000-default.conf /etc/apache2/sites-available/000-default.conf $
/etc/apache2/sites-available/000-default.conf の内容は次のようにしました。
<VirtualHost *:80> <Directory /var/www/html> Options Indexes FollowSymLinks MultiViews AllowOverride All Require all granted </Directory> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.example.com ServerAdmin webmaster@localhost DocumentRoot /var/www/html # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
以下、編集前との違いです。
$ diff -up 000-default.conf.org 000-default.conf --- 000-default.conf.org 2018-08-24 08:01:11.000000000 +0900 +++ 000-default.conf 2018-08-23 08:09:45.000000000 +0900 @@ -1,4 +1,10 @@ <VirtualHost *:80> + <Directory /var/www/html> + Options Indexes FollowSymLinks MultiViews + AllowOverride All + Require all granted + </Directory> + # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName $
加えた設定の内容です。
- Options
- Indexes: DirectoryIndexで指定したファイルが見つからない場合ディレクトリリストを表示。本番環境などでは削除する。開発環境なので許可
- FollowSymLinks: このディレクトリのシンボリックリンクをたどることを許可
- MultiViews: ロケールに合わせて異なる言語を表示できるようになります
- 参考: 特定のディレクトリやファイル
- AllowOverride
- All:.htaccess で設定可能なものは全て有効
- 参考: [Apache] Options と AllowOverRide の設定値を改めて整理してみる | バシャログ。
- Require
- all granted: すべてのアクセスを許可
- 参考: Apache2.4で、アクセス制限の記述方法が変更されていた – Qiita
あとはビルドして起動して確認すれば完了です。
docker-compose build docker-compose up -d
以下、他に勉強になったことです。
php:apache の Apache はどのような環境で動いているか?
上記参考ページを読んでいると、どうやら php:apache は Debian だそうです。Debian のバージョンを調べてみました。
バージョン確認
# cat /etc/issue Debian GNU/Linux 9 \n \l #
なるほど、確かに、Debian ですね。
参考ページ
Apache のバージョン確認
# apache2 -v Server version: Apache/2.4.25 (Debian) Server built: 2018-06-02T08:01:13 #
Apache のモジュール一覧を確認。
# apachectl -M AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.240.3. Set the 'ServerName' directive globally to suppress this message Loaded Modules: core_module (static) so_module (static) watchdog_module (static) http_module (static) log_config_module (static) logio_module (static) version_module (static) unixd_module (static) access_compat_module (shared) alias_module (shared) auth_basic_module (shared) authn_core_module (shared) authn_file_module (shared) authz_core_module (shared) authz_host_module (shared) authz_user_module (shared) autoindex_module (shared) deflate_module (shared) dir_module (shared) env_module (shared) filter_module (shared) mime_module (shared) mpm_prefork_module (shared) negotiation_module (shared) php5_module (shared) reqtimeout_module (shared) rewrite_module (shared) setenvif_module (shared) status_module (shared) #
参考ページ
おわりに
をやってみたところ、できなかったため今回の投稿となりました。
Debian ディストリビューションでの Apache は初めてでしたし、Apache の設定、大分忘れていたので良い復習になりました♪
以上です。