LNMP(Nginx+PHP‑FPM+MySQL/MariaDB)完全ガイド:構成・設定・パフォーマンス最適化と運用のポイント
LNMPとは — 概要と特徴
LNMPは、Webサーバー構成の一つで、Linux(L)、Nginx(N)、MySQL/MariaDB(M)、PHP(P)の頭文字を取った略称です。動的サイトやCMS(例:WordPress)を高効率に動かすために広く使われており、特にNginxの軽量で高同時接続に強い特性と、PHP-FPM(FastCGI Process Manager)を組み合わせることで、リクエスト処理のスケーラビリティとパフォーマンスを向上させます。
各コンポーネントの役割
- Linux:OS。セキュリティ、ファイルシステム、プロセスマネジメント、パッケージ管理などの土台。
- Nginx:静的ファイル配信、リバースプロキシ、ロードバランサ、TLS終端などを担うWebサーバ/プロキシ。
- MySQL / MariaDB:リレーショナルデータベース。アプリケーションのデータ保存・クエリ処理を行う。MariaDBはMySQL互換のフォークで、多くのディストリで採用されている。
- PHP(PHP-FPM):動的コンテンツを生成する言語処理系。PHP-FPMはFastCGIでPHPをプロセス化してNginxと連携するための仕組みで、プロセスマネジメントや設定の柔軟性を提供する。
LAMPとの比較
LAMP(Linux, Apache, MySQL, PHP)は歴史的に広く使われてきました。LNMPはNginxを採用する点が異なります。Nginxはイベント駆動型で低メモリかつ高い同時接続性を持つため、静的コンテンツ配信や大量接続時のレスポンス性能で有利です。一方、Apacheはモジュール豊富で.htaccessなどディレクトリ単位の設定が容易という利点があります。用途に応じて選択しますが、近年では高トラフィック環境でLNMPが好まれるケースが多いです。
基本的なアーキテクチャ(流れ)
- クライアント(ブラウザ)→ Nginx(リバースプロキシ、TLS終端、静的ファイル処理)
- 動的リクエスト→ Nginx が FastCGI (unix ソケットまたは TCP) 経由で PHP-FPM に転送
- PHP-FPM がアプリ(例:WordPress)を実行し、必要に応じて MySQL/MariaDB にクエリを投げる
- DBからの結果を受け取って HTML を組み立て、Nginx 経由でクライアントに返却
導入・設定のポイント(概要)
主要なポイントは以下です。各ディストリビューションでパッケージ名やパスが異なるので注意してください。
- PHP-FPMはUNIXドメインソケット(例:/run/php/php7.4-fpm.sock)かTCP(127.0.0.1:9000)のどちらかでNginxと接続する。UNIXソケットは少し高速でセキュアだが、権限管理に注意。
- Nginxのserverブロックで静的ファイルは直接処理し、PHPファイルのみfastcgiで渡す(try_filesでの安全なルーティング)。
- MySQLはbind-addressの設定やrootユーザーのリモートアクセス制限、mysql_secure_installationの実行など基本的なハードニングを行う。
サンプル(最小限のNginxサーバブロック)
WordPress等を動かす際の代表的な設定例(抜粋):
<?php ?>等は使わず、以下のように設定します(実際のファイルでは<と>を記述)。
<pre>server {
listen 80;
server_name example.com;
root /var/www/example.com/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~* \.(jpg|jpeg|png|gif|css|js|webp)$ {
expires 30d;
access_log off;
}
}</pre>
PHP-FPMの基本設定例(プール)
pool設定(例 /etc/php/7.4/fpm/pool.d/www.conf)の重要項目:
- listen = /run/php/php7.4-fpm.sock(または 127.0.0.1:9000)
- user / group = www-data(Webサーバと合わせる)
- pm = dynamic(dynamic/static/ondemand)
- pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers — リソースに合わせて調整
パフォーマンス向上のポイント
- OPcacheを有効化してPHPの実行を高速化する。
- FastCGIキャッシュ(Nginxのproxy_cache / fastcgi_cache)を使って動的生成の負荷を軽減する。
- gzip圧縮、ブラウザキャッシュ、HTTP/2(TLS有効時)やTLS設定の最適化で通信効率を改善する。
- DB負荷はクエリ最適化、インデックス適用、スロークエリログの解析で改善する。必要に応じてクエリキャッシュ(MySQLでは非推奨のため代替でRedisやアプリ側のキャッシュを検討)や読み取りレプリカを導入する。
- セッションストレージやオブジェクトキャッシュにはRedis/Memcachedを使い、DBアクセスを減らす。
セキュリティと運用の注意点
- サーバは定期的にOSやパッケージのアップデートを行う(セキュリティパッチ適用)。
- ファイアウォール(UFW/iptables/nftables)で不要なポートを閉じる。MySQLは原則ローカルアクセスのみ(bind-address=127.0.0.1)にする。
- Let's Encrypt等でTLSを導入し、HSTSや安全なサイファーを設定する。
- PHPの設定でdisplay_errorsをオフにし、エラーログは適切にローテートする。
- ファイル・ディレクトリの権限は最小権限の原則で設定。アップロードディレクトリに実行権限を付与しない等。
- MySQLのrootアカウントは強力なパスワードにし、不要なユーザーや権限は削除する。mysql_secure_installationを実行する。
スケーリングと高可用性
- 読み取り負荷が高い場合はDBの読み取りレプリカを追加。
- アプリ層はステートレス化して複数台化、Nginxやロードバランサ(HAProxy、AWS ELBなど)で負荷分散。
- セッション管理はRedis等外部に置くことで水平スケールを容易にする。
- DBの高可用化にはマスター/スレーブ、クラスタ(MySQL Group Replication、Galera Cluster、MariaDB Galera)や、CloudのマネージドDBを検討。
監視・ログ・バックアップ
- 監視:Nginxステータス(stub_status)、PHP-FPMのstatusページ、MySQLの監視(Percona Monitoring、Prometheus exporter等)を導入し、レスポンス時間・接続数・負荷を可視化する。
- ログ:アクセスログ、エラーログ、DBのスロークエリログを有効にして分析。ログローテーションを設定する。
- バックアップ:論理バックアップ(mysqldump)と物理バックアップ(Percona XtraBackup)を用途に応じて使い分け、定期バックアップと復旧手順を必ず検証する。バイナリログでPoint-in-Timeリカバリ(PITR)を可能にする。
よくあるトラブルと対処法
- 502 Bad Gateway:PHP-FPMが停止している、ソケットの権限不整合、PHP-FPMが過負荷で応答できない等が原因。PHP-FPMログとNginxエラーログを確認。
- 504 Gateway Timeout:バックエンド処理(DBクエリや外部API)が遅い。Nginxのタイムアウト値、PHPの実行時間、DBのスロークエリを点検。
- DB接続エラー:認証情報、接続先(socket/tcp)、max_connections超過、ユーザ権限の確認。
- パフォーマンス低下:OPcache無効、I/O待ち、インデックス欠如、メモリ不足などを疑い、プロファイリング/モニタリングで原因特定。
導入時のチェックリスト(簡易)
- OS・パッケージのバージョンを決める(LTS推奨)。
- Nginx, PHP, MySQL/MariaDBのバージョン互換性を確認。
- PHP-FPMのプール設定とNginxのfastcgi_passを一致させる。
- ファイル/ディレクトリの所有者と権限を設計する。
- TLS、ファイアウォール、ログローテーション、バックアップの実装。
- 監視とアラートの設置(閾値・通知方法の定義)。
まとめ
LNMPは性能と拡張性に優れたWebアーキテクチャで、特に高トラフィック環境やリソース効率を重視する場面で有効です。Nginxのイベント駆動モデルとPHP-FPMのプロセス管理、DBのチューニングを組み合わせることで、WordPressのようなPHPベースのアプリケーションを高いパフォーマンスで運用できます。ただし、セキュリティ、監視、バックアップ、適切なチューニングが欠かせません。導入前には動作検証と運用設計(スケール方針、HA設計、復旧手順)の準備を行いましょう。
参考文献
- NGINX Documentation
- PHP-FPM (php.net)
- MySQL Documentation
- MariaDB Knowledge Base
- WordPress: Using Nginx
- Let’s Encrypt Documentation
- Percona Documentation (MySQL/MariaDB運用・バックアップ等)
- DigitalOcean Community Tutorials(LNMP構築手順や設定例が豊富)


