Dockerの公式から取得してきたhttpdコンテナでmod_rewriteの設定ができません。
https://hub.docker.com/_/httpd/
ソースは後述します、mod_rewriteをするために必要な設定はしているはずなのですが、mod_rewriteが有効になりません。
dockerのhttpdを使う場合、何か不足している設定はありますでしょうか?
エラー内容
index.phpにアクセスすると、次のようなエラーが表示されます。
Forbidden
You don't have permission to access / on this server.
ログのエラーは下記で、mod_rewriteに必要な設定がされていないことがわかります。
AH00670: Options FollowSymLinks and SymLinksIfOwnerMatch are both off, so the RewriteRule directive is also f
orbidden due to its similar ability to circumvent directory restrictions : /var/www/html/index.php
設定内容
最終の目的はwordpressサイトを開発環境に再現する事です。
コンテナ構成
もしかしたら、公式のphp+apacheや、wordpressのコンテナを使った方が早いかもしれませんが、理解を深めたいのでそれぞれのコンテナを結合しています。
ディレクトリ構成
public_html配下に.htaccessをおきます。
docker-compose.ymlと同じ階層に、各Dockerfileが下記の構成で配置されています
公開ディレクトリ
public_html/
├── index.php
└── .htaccess
docker関連のファイル
stacks/
├── db
│ └── Dockerfile
├── php
│ └── Dockerfile
└── web
├── Dockerfile
└── apache2
└── conf.d
└── 000-default.conf
ソース
公開ディレクトリ
.htaccess
wordpressの環境なので、次のような設定をしています。
htaccess
1# BEGIN WordPress 2<IfModule mod_rewrite.c> 3RewriteEngine On 4RewriteBase / 5RewriteRule ^index.php$ - [L] 6RewriteCond %{REQUEST_FILENAME} !-f 7RewriteCond %{REQUEST_FILENAME} !-d 8RewriteRule . /index.php [L] 9</IfModule> 10# END WordPress
Docker関連
docker-compose.yml
yml
1version: "3.2" 2services: 3 php: 4 build: 5 context: './stacks/php/' 6 volumes: 7 - ./public_html/:/var/www/html/ 8 web: 9 build: 10 context: './stacks/web/' 11 links: 12 - php 13 - db 14 ports: 15 - "8080:80" 16 volumes: 17 - ./public_html/:/var/www/html/ 18 db: 19 build: 20 context: ./stacks/db/
Dockerfile
webサーバーに関係する、stacks/web/Dockerfile
のみ記載します
FROM httpd:2.4.33-alpine RUN apk update; \ apk upgrade; ## setting conf.d RUN echo 'IncludeOptional conf.d/*.conf' \ >> /usr/local/apache2/conf/httpd.conf RUN mkdir /usr/local/apache2/conf.d COPY apache2/conf.d/000-default.conf /usr/local/apache2/conf.d/000-default.conf ## setting mod_rewrite RUN sed -i '/LoadModule rewrite_module/s/^#//g' /usr/local/apache2/conf/httpd.conf ## setting log RUN mkdir -p /var/log/apache2/ RUN ln -sf /proc/self/fd/1 /var/log/apache2/access.log RUN ln -sf /proc/self/fd/2 /var/log/apache2/error.log
追加するapacheのconfファイル
ファイル名は000-default.conf
という名前で追加します。
mod_rewiteに必要な、FollowSymLinksと、SymLinksIfOwnerMatchはここで設定します。
conf
1ServerName localhost 2ServerAdmin webmaster@localhost 3 4DocumentRoot /var/www/html/ 5 6LoadModule deflate_module /usr/local/apache2/modules/mod_deflate.so 7LoadModule proxy_module /usr/local/apache2/modules/mod_proxy.so 8LoadModule proxy_fcgi_module /usr/local/apache2/modules/mod_proxy_fcgi.so 9 10<VirtualHost *:80> 11 DocumentRoot /var/www/html/ 12 13 CustomLog /proc/self/fd/1 common 14 ErrorLog /proc/self/fd/2 15 16 <Directory /var/www/html/> 17 DirectoryIndex index.html index.php 18 19 Options Indexes FollowSymLinks SymLinksIfOwnerMatch 20 AllowOverride All 21 Require all granted 22 23 Options Includes 24 AddType text/html .shtml 25 AddOutputFilter INCLUDES .shtml 26 27 </Directory> 28 29 <FilesMatch .php$> 30 SetHandler "proxy:fcgi://php:9000" 31 </FilesMatch> 32</VirtualHost> 33
備考
- httpコンテナに入っているデフォルトのhttp.confファイルには、SymLinksIfOwnerMatch、および、FollowSymLinksを無効にする(先頭に-をつける)設定はありませんでした。
- 適当に、info.phpと言うファイルを作って、
<?php phpinfo() ?>
を実行すると設定がみれますので、php自体は実行できています。 - confから、fcgiのphpを参照する処理を除いた場合、phpを解析できませんので、追加した設定は有効になっています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/12/06 14:38