こんにちは、ニキです。
この記事はこんな方におすすめです。
- docker composeやNginx の基本的なことは分かる。
- NginxとPHP-FPMをFastCGIで通信したい
- SSL通信できるようにしたい。
今回の記事では、NginxとPHP-FPMをFastCGIで通信する方法を解説します。
PHP-FPMとは
PHP-FPMはFastCGIを実装しています。
FastCGIはプロトコル。つまり、通信手段です。
PHPのWebサーバーとしてNginxと通信するには、FastCGIを使用する必要があります。
PHP-FPMについての詳細は以下のページで紹介されています。 https://php-fpm.org/
PHP-FPMのDockerイメージの選び方
イメージのバリエーション
php:<version>-cli
php:<version>-apache
php:<version>-fpm
php:<version>-alpine
php:8.2-fpm-alpine
のような組み合わせたイメージもあります。
このほかにも、bullseye等のDebianベースのイメージもあり、軽量化の手段として利用されます。
イメージの選び方
今回はphp-fpmは必須なので、以下のどれかにします。
php:<version>-fpm
← production向きphp:<version>-fpm-alpine
← 開発環境向き。パッケージの要件やパフォーマンスの面で、本番に使えるかは要検討です。php:<version>-fpm-bullseye
← 開発環境・本番環境共に使えます。
今回は、開発環境を想定しているので、php:<version>-fpm-apline
を選択します。
PHPのDockerイメージについてはDockerHubに詳しい説明があります。
NginxとPHP-FPMの環境の設定
default.confの作成
default.confを作成します。https://localhost:8443/index.phpへのリクエストをNginxコンテナが受け取り、PHPコンテナの/var/www/html/index.phpをレスポンスする設定です。
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/conf.d/localhost.pem;
ssl_certificate_key /etc/nginx/conf.d/localhost-key.pem;
root /var/www/html;
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
秘密鍵とSSL証明書を新たに用意するなら以下の記事が参考になります。
compose.yamlの作成
動作確認用のindex.phpを作成します。
<?php
echo 'Hello PHP-FPM';
compose.yamlを作成します。
services:
nginx:
image: nginx:1.25.1-alpine-slim
container_name: nginx
ports:
- 8443:443
volumes:
- $PWD/default.conf:/etc/nginx/conf.d/default.conf
- $PWD/localhost.pem:/etc/nginx/conf.d/localhost.pem
- $PWD/localhost-key.pem:/etc/nginx/conf.d/localhost-key.pem
php:
image: php:8.2.8-fpm-alpine3.18
container_name: php
volumes:
- $PWD/index.php:/var/www/html/index.php
NginxとPHP-FPM環境の動作確認
コンテナを作成・起動します。
% docker compose up -d
コンテナのリストを確認します。
% docker compose ps
以下のように表示されていればOKです。
% docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
nginx nginx:1.25.1-alpine-slim "/docker-entrypoint.…" nginx 8 minutes ago Up 8 minutes 80/tcp, 0.0.0.0:8443->443/tcp
php php:8.2.8-fpm-alpine3.18 "docker-php-entrypoi…" php 8 minutes ago Up 8 minutes 9000/tcp
https://localhost:8443/index.php
へアクセスします。以下のように表示されていればOKです。
Hello PHP-FPM
PHP-FPMのポート確認方法
9000番ポートの設定は、PHPコンテナ内で確認できます。
# cat /usr/local/etc/php-fpm.d/www.conf | grep 9000
以下のような表示を確認できます。
listen = 127.0.0.1:9000
参考
https://nginx.org/en/docs/http/configuring_https_servers.html
まとめ
今回の記事では、NginxとPHP-FPMをFastCGIで通信する方法を解説しました。