サーバー設定 · 3 min read · Oct 13, 2025

Ubuntu 16.04 LTS に Nginx と PHP 7 および MySQL 5.7 (LEMP) をインストールする

Nginx (発音は「エンジンエックス」) は、無料でオープンソースの高性能 HTTP サーバーです。Nginx は、その安定性、豊富な機能セット、シンプルな設定、低リソース消費で知られています。このチュートリアルでは、PHP 7 サポート (PHP-FPM 経由) と MySQL 5.7 サポートを持つ Ubuntu 16.04 サーバーに Nginx をインストールする方法を示します (LEMP = Linux + nginx (発音は「 e ngine x」) + MySQL + PHP)。

1 予備ノート

このチュートリアルでは、ホスト名 server1.example.com と IP アドレス 192.168.1.100 を使用します。これらの設定はあなたの環境によって異なる場合があるため、適宜置き換えてください。

私はこのチュートリアルのすべての手順を root 権限で実行していますので、root としてログインしていることを確認してください:

sudo -s

2 MySQL 5.7 のインストール

MySQL をインストールするために、次のコマンドを実行します:

apt-get -y install mysql-server mysql-client

MySQL の root ユーザーのパスワードを入力するよう求められます。このパスワードは、ユーザー root@localhost および [email protected] に対して有効ですので、後で手動で MySQL の root パスワードを指定する必要はありません:

MySQL “root” ユーザーの新しいパスワード: <– yourrootsqlpassword
MySQL “root” ユーザーのパスワードを再入力: <– yourrootsqlpassword

データベースサーバーを保護し、匿名ユーザーとテストデータベースを削除するには、mysql_secure_installation コマンドを実行します。

mysql_secure_installation

次の質問が表示されます:

root@server1:~# mysql_secure_installation
MySQL サーバーのデプロイを保護しています。
ユーザー root のパスワードを入力してください: <-- MySQL root パスワードを入力
VALIDATE PASSWORD PLUGIN を使用してパスワードをテストし、セキュリティを向上させることができます。パスワードの強度をチェックし、ユーザーが十分に安全なパスワードのみを設定できるようにします。VALIDATE PASSWORD プラグインを設定しますか?
y|Y を押してはい、他のキーを押していいえ: <-- この機能を希望する場合は y を押し、そうでなければ Enter を押します。  
既存のパスワードを使用しています。  
root のパスワードを変更しますか? ((y|Y を押してはい、他のキーを押していいえ): <-- Enter を押します
... スキップ中。  
デフォルトでは、MySQL インストールには匿名ユーザーが含まれており、誰でもユーザーアカウントを作成せずに MySQL にログインできます。これはテスト用にのみ意図されており、インストールを少しスムーズにするためのものです。  
本番環境に移行する前に、これらを削除する必要があります。
匿名ユーザーを削除しますか? (y|Y を押してはい、他のキーを押していいえ): <-- y  
成功。
通常、root は 'localhost' からのみ接続を許可されるべきです。これにより、誰かがネットワークから root パスワードを推測できなくなります。
リモートでの root ログインを禁止しますか? (y|Y を押してはい、他のキーを押していいえ): <-- y  
成功。
デフォルトでは、MySQL には 'test' という名前のデータベースがあり、誰でもアクセスできます。これもテスト用にのみ意図されており、本番環境に移行する前に削除する必要があります。
テストデータベースとそのアクセスを削除しますか? (y|Y を押してはい、他のキーを押していいえ): <-- y  
- テストデータベースを削除中...  
成功。
- テストデータベースの権限を削除中...  
成功。
権限テーブルを再読み込みすると、これまでに行ったすべての変更が即座に適用されます。
権限テーブルを今すぐ再読み込みしますか? (y|Y を押してはい、他のキーを押していいえ): <-- y  
成功。
すべて完了!

MySQL は現在保護されています。

3 Nginx のインストール

すでに Apache2 をインストールしている場合は、まず次のコマンドで削除し、その後 nginx をインストールします:

service apache2 stop  
update-rc.d -f apache2 remove  
apt-get remove apache2

Nginx は Ubuntu 16.04 用のパッケージとして利用可能で、インストールできます。

apt-get -y install nginx

その後、nginx を起動します:

service nginx start

ブラウザにウェブサーバーの IP アドレスまたはホスト名を入力します (例: http://192.168.1.100)、次のページが表示されるはずです:

Ubuntu Nginx のデフォルトページ。

Ubuntu 16.04 のデフォルト nginx ドキュメントルートは /var/www/html です。

4 PHP 7 のインストール

PHP-FPM (PHP-FPM (FastCGI プロセスマネージャ) は、あらゆるサイズのサイト、特に忙しいサイトに役立つ追加機能を備えた PHP FastCGI の代替実装) を通じて nginx で PHP を動作させることができます。次のようにインストールします:

apt-get -y install php7.0-fpm

PHP-FPM はデーモンプロセス (init スクリプト php7.0-fpm を持つ) で、ソケット /run/php/php7.0-fpm.sock で FastCGI サーバーを実行します。

5 nginx の設定

nginx の設定は /etc/nginx/nginx.conf にあり、今開きます:

nano /etc/nginx/nginx.conf

設定は理解しやすいです (詳細についてはここを参照してください: http://wiki.nginx.org/NginxFullExample および http://wiki.nginx.org/NginxFullExample2)

まず (これはオプションです) keepalive_timeout を適切な値に調整します:

[...]  
    keepalive_timeout   2;  
[...]  

仮想ホストは server {} コンテナ内で定義されます。デフォルトの vhost は /etc/nginx/sites-available/default ファイルに定義されているので、次のように修正します:

nano /etc/nginx/sites-available/default
[...]  
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # SSL 設定  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # 注意: SSL トラフィックには gzip を無効にする必要があります。  
 # 参照: https://bugs.debian.org/773332  
 #  
 # ssl_ciphers について調べて、安全な設定を確保してください。  
 # 参照: https://bugs.debian.org/765782  
 #  
 # ssl-cert パッケージによって生成された自己署名証明書  
 # 本番サーバーでは使用しないでください!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # PHP を使用している場合は index.php をリストに追加します  
 index index.html index.htm index.nginx-debian.html;  
  
 server_name _;  
  
 location / {  
 # 最初にリクエストをファイルとして提供しようとし、次に  
 # ディレクトリとして、最後に 404 を表示します。  
 try_files $uri $uri/ =404;  
 }  
  
 # 127.0.0.1:9000 でリッスンしている FastCGI サーバーに PHP スクリプトを渡します  
 #  
 location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # php7.0-cgi のみの場合:  
 # fastcgi_pass 127.0.0.1:9000;  
 # php7.0-fpm の場合:  
 fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }  
  
 # Apache のドキュメントルートが nginx のものと一致する場合、  
 # .htaccess ファイルへのアクセスを拒否します  
 #  
 location ~ /\.ht {  
  deny all;  
 }  
}
[...]  

servername ; はこれをデフォルトのキャッチオール vhost にします (もちろん、ここに www.example.com のようなホスト名を指定することもできます)。

root /var/www/html; はドキュメントルートが /var/www/html ディレクトリであることを意味します。

PHP にとって重要な部分は location ~ .php$ {} スタンスです。これを有効にするためにコメントを外します。

ファイルを保存して nginx を再読み込みします:

service nginx reload

次に /etc/php/7.0/fpm/php.ini を開きます…

nano /etc/php/7.0/fpm/php.ini

… そして cgi.fix_pathinfo=0 を設定します:

[...]  
; cgi.fix_pathinfo は CGI 用の *実際の* PATH_INFO/PATH_TRANSLATED サポートを提供します。PHP の  
; 以前の動作は PATH_TRANSLATED を SCRIPT_FILENAME に設定し、  
; PATH_INFO が何であるかを理解しませんでした。  
; PATH_INFO についての詳細は cgi スペックを参照してください。  
; これを 1 に設定すると、PHP CGI はそのパスを仕様に従って修正します。  
; 0 に設定すると、PHP は以前のように動作します。デフォルトは 1 です。  
; スクリプトを修正して SCRIPT_FILENAME を使用するようにしてください。  
; http://php.net/cgi.fix-pathinfo  
cgi.fix_pathinfo=0  
[...]  

PHP-FPM を再読み込みします:

service php7.0-fpm reload

次に、ドキュメントルート /var/www/html に次の PHP ファイルを作成します:

nano /var/www/html/info.php

ブラウザでそのファイルを呼び出します (例: http://192.168.1.100/info.php):

Nginx での Ubuntu の PHP 情報。

ご覧の通り、PHP 7 が動作しており、Server API 行に示されているように FPM/FastCGI を通じて動作しています。さらに下にスクロールすると、すでに PHP で有効になっているすべてのモジュールが表示されます。MySQL はそこにリストされていないため、PHP にはまだ MySQL サポートがありません。

6 PHP 7 に MySQL サポートを追加する

PHP に MySQL サポートを追加するには、php7.0-mysql パッケージをインストールします。また、アプリケーションに必要な他の PHP モジュールもインストールすることをお勧めします。利用可能な PHP モジュールを次のように検索できます:

apt-cache search php7.0

必要なものを選択し、次のようにインストールします:

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

APCu は PHP 7 に付属の Opcache モジュールの拡張で、APC キャッシュをサポートするソフトウェア (例: Wordpress キャッシュプラグイン) の互換性機能を追加します。

APCu は次のようにインストールできます:

apt-get -y install php-apcu

次に PHP-FPM を再読み込みします:

service php7.0-fpm reload

次に、ブラウザで http://192.168.1.100/info.php を再読み込みし、モジュールセクションに再度スクロールします。そこには MySQL モジュールを含む多くの新しいモジュールが見つかるはずです:

PHP モジュールがインストールされました。

7 PHP-FPM を TCP 接続で使用する

デフォルトでは、PHP-FPM はソケット /var/run/php/php7.0-fpm.sock でリッスンしています。PHP-FPM を TCP 接続で使用することも可能です。そのためには、/etc/php/7.0/fpm/pool.d/www.conf を開きます…

nano /etc/php/7.0/fpm/pool.d/www.conf

… そして listen 行を次のように変更します:

[...]  
;listen = /var/run/php5-fpm.sock  
listen = 127.0.0.1:9000  
[...]  

これにより、PHP-FPM は IP 127.0.0.1 (localhost) のポート 9000 でリッスンします。システムで使用されていないポートを使用してください。

次に PHP-FPM を再読み込みします:

php7.0-fpm reload

次に、nginx の設定とすべての vhosts を確認し、行 fastcgi_pass unix:/ var/run/ php /php7.0-fpm.soc k; を fastcgi_pass 127.0.0.1:9000; に変更します。例えば、次のように:

nano /etc/nginx/sites-available/default
[...]  
        location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
  
 # php7.0-cgi のみの場合:  
 fastcgi_pass 127.0.0.1:9000;  
 # php7.0-fpm の場合:  
 # fastcgi_pass unix:/run/php/php7.0-fpm.sock;  
 }
[...]  

最後に、nginx を再読み込みします:

service nginx reload

これで完了です。Nginx LEMP サーバーがインストールされました。

8 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。