NginxとPHP-FPMの設定
PHPアプリケーションを配信するため、NginxをPHP-FPMのリバースプロキシとして設定します
「NginxとPHP-FPMの設定」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
Nginx + PHP-FPMを使う理由
Nginxは、高性能なWebサーバー兼リバースプロキシです。PHP-FPM(FastCGI Process Manager)は、PHPワーカープロセスのプールを管理します。NginxはFastCGIを介してPHPリクエストをFPMに渡します。
基本的なNginxサーバーブロック
PHPアプリケーション用の最小限のNginx設定です。
# /etc/nginx/sites-available/myapp
server {
listen 80;
server_name example.com;
root /srv/myapp/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}try_filesディレクティブ
try_files $uri $uri/ /index.php?$query_stringは、まず静的ファイルの提供を試みます。見つからない場合はindex.phpにフォールバックし、フロントコントローラーによるルーティング(Laravel、Symfony)を有効にします。
PHP-FPMプールの設定
/etc/php/8.3/fpm/pool.d/www.confでワーカープールを設定します。
[www]
pm = dynamic
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
pm.max_requests = 500 ; recycle workers to prevent leaksUnixソケットとTCPの比較
同一マシン上の通信では、Unixソケット(fastcgi_pass unix:/run/php/php8.3-fpm.sock)のほうがTCP(127.0.0.1:9000)より高速です。
Let's EncryptによるHTTPS
Certbotを使用して、無料のTLS証明書を取得します。
$ certbot --nginx -d example.com
# Certbot modifies your Nginx config and sets up auto-renewalGzip圧縮
gzipを有効にして、レスポンスサイズを削減します。
# nginx.conf or server block:
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_min_length 1024;静的アセットのブラウザーキャッシュ
静的ファイルにCache-Controlヘッダーを追加します。
location ~* \.(js|css|png|jpg|gif|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}Nginxでのレート制限
limit_reqモジュールを使用してIPアドレスごとのリクエスト数を制限します。PHPが起動する前に機能する第一の防衛線です。
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
}
server {
location /api/ {
limit_req zone=one burst=20 nodelay;
}
}セキュリティヘッダー
すべてのレスポンスにセキュリティヘッダーを追加します。
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header Referrer-Policy "strict-origin-when-cross-origin";リロードと再起動
Nginxの設定を変更した後は、グレースフルにリロードしてダウンタイムを発生させないようにします。nginx -t && nginx -s reloadPHP-FPMの設定を変更した後は、systemctl reload php8.3-fpmを実行します。
まとめ
FastCGIを介してpublic/index.phpを参照するサーバーブロックをNginxに設定します。PHP-FPMプールの設定を調整します。Unixソケットを使用します。HTTPS、gzip、静的ファイルのキャッシュを有効にします。
確認問題
try_files $uri $uri/ /index.php?$query_stringは何を行いますか?
よくある質問
「NginxとPHP-FPMの設定」レッスンは無料ですか?
はい。「NginxとPHP-FPMの設定」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「NginxとPHP-FPMの設定」で何を学びますか?
PHPアプリケーションを配信するため、NginxをPHP-FPMのリバースプロキシとして設定します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「NginxとPHP-FPMの設定」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- NginxとPHP-FPMの設定
- 環境変数と.envファイル
- GitHub Actionsでデプロイする
- PHPアプリケーションをDocker化する