Dockerでコンテナ化したNginxで、スタティックなコンテンツだけではなく、動的なコンテンツを表示したくなり、Docker+Nginxの環境で更にPHPを追加しました。その方法をまとめました。
Docker + Nginxの環境を構築する
はじめにDocker+Nginxの環境を作ります。NginxをDockerで動かす方法については、以下の記事をご覧ください。
また、Nginxの設定ファイルを編集する必要があります。Nginxの設定ファイルをコンテナからコピーして、編集し、使用す方法については、以下の記事をご覧ください。
この記事では、上記の2つの記事の作業が完了していて、Docker+Nginxの環境が出来ていて、設定ファイルを編集可能な状態になっていることを前提にしています。
Docker ComposeでPHPのコンテナを追加
Docker ComposeでNginxに加えて、PHPのコンテナを追加します。次のようにdocker-compose.yml
を編集し、php
の設定を追加します。
version: "3"
services:
nginx:
build: .
ports:
- 8080:8080
volumes:
- ./content_home:/usr/share/nginx/html
php:
image: php:8-fpm
volumes:
- ./content_home:/usr/share/nginx/html
追加したのは、php:
以下の部分です。
それと、こちらはどちらでも良いのですが、動作確認環境の都合でnginx:
のports
のポート番号も変更しました。
Nginxの設定
Nginxの設定を変更します。default.conf
ファイルを次のように編集します。
server {
listen 8080;
listen [::]:8080;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
root /usr/share/nginx/html;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
変更を加えたのは以下の場所です。
root
の定義場所を移動。(location /
のスコープ外に移動)index
の定義場所を移動。(root
と同様)index
にindex.php
を追加。location /
の定義を変更。
try_files
の定義を追加。
location ~ \.php?
の定義を追加。
- デフォルトでコメントアウトされていた設定をコメント解除。
root
を/usr/share/nginx/html;
に変更。fastcgi_pass
をphp:9000
に変更。fastcgi_param
をSCRIPT_FILENAME $document_root$fastcgi_script_name;
に変更。
動作テスト
上手く動作するかテストします。content_home
にindex.php
ファイルを作成し、以下の内容を入力します。
<?php
echo phpinfo();
?>
次にターミナルで以下を実行します。
docker-compose up -d --build
ブラウザでhttp://localhost:8080/index.php
を開きます。成功すると次のようにphpinfo()
の出力結果が表示されます。