nginx

vagrant ubuntu の nginx で PHP7 動くようにする

更新日:

前回のエントリの続き。
モジュール版PHPが動作するApacheと、FastCGI経由でPHPを動作させるnginx。まぁ動くようにするだけなら簡単だが理解しておかないと設定ファイルの意味がわからなくなるので注意。

モジュール版PHPとFastCGI PHP

ApacheのPHPはワーカープロセスで実行される。対してnginxのPHPはCGIであって基本的にリクエストに対してプロセスの起動が伴う。モジュール版のリスクといえば、ワーカープロセスがもつ権限がPHPに引き継がれるセキュリティ上のリスクだが、それを差し置いてもCGIに移行する意味が直感的に想像し難い。当然、高速にCGIを実行できるような工夫があって、だから"Fast"CGIなんだろうが、その当たりは理解が必要だと思った。

Wikipedia:

CGIは、ユーザーから要求がある度に、プロセスの生成と破棄が行われる。大量の要求があればその分だけプロセスの生成と破棄が実施され、この事がパフォーマンスの悪化に繋がっている。
FastCGIは、プロセスをメモリ上に永続化させることで、その起動と終了にかかる時間をカットし、結果としてプログラム動作速度の向上およびサーバ負荷の低下が可能となる。最初にプロセスが実行された段階で、そのプロセスはメモリ上に格納され、次の要求に対してはそのメモリに格納されたプロセスを実行する。

FastCGI、どうやらプロセスを使い回すようだ。 リクエストのたびにプロセスあげてたらそりゃ遅くて仕方がないわけで、ワーカープロセス?は立ち上がりっぱなし。PHP-FPMというサービスがポート番号=9000でListenしており、nginxがPHP-FPMと通信する、という仕組みなようだ。nginxのconfファイルにFastCGIモジュールとのTCP接続設定があるのは、こういう構造に起因する。

名前ベースのVirtualHost

Apacheではお馴染みのNameBasesVirtualHostを設定する。
まずはhoge1.comのDocumentRootを/var/www/htmlにする。

$ cd /etc/nginx/sites-available
$ sudo vi default
..
server {
  listen 80;
  server_name hoge1.com;

  root /var/www/html;
  index index.html index.htm index.php;

  location / {
     try_files $uri $uri/ = 404;
  }

  location ~ ¥.php$ {
     include snippets/fastcgi-php.conf
     fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }
...
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$sudo nginx -s reload

続いて、hoge2.com を /var/www/html/test/ に通してみる。

$ sudo vi default
...
$ cd /etc/nginx/sites-available
$ sudo vi default
..
server {
  listen 80;
  server_name hoge2.com;

  root /var/www/html/test;
  index index.html index.htm index.php;

  location / {
     try_files $uri $uri/ = 404;
  }

  location ~ ¥.php$ {
     include snippets/fastcgi-php.conf
     fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  }
...
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$sudo nginx -s reload

当然、hoge1.com、hoge2.com は、ホスト、ゲスト両方の/etc/hostsに登録すること。またはいきなりドメインを設定しても良い。あっけなく設定できた。

# 何か足りないかも。

-nginx
-, ,

Copyright© ikuty.com , 2018 AllRights Reserved Powered by AFFINGER4.