0Pricing
PHP Academy · レッスン

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 leaks

Unixソケットと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-renewal

Gzip圧縮

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. NginxとPHP-FPMの設定
  2. 環境変数と.envファイル
  3. GitHub Actionsでデプロイする
  4. PHPアプリケーションをDocker化する
← PHP Academyに戻る