nginx で php-fpm と spawn-fcgi(perl)を UNIX ドメインソケットで利用する


この oyasu.info は ConoHa へ移転しましたが、実際に使用しているウェブサーバーの構築に向けて操作手順を含めて紹介します。

関連する記事

  1. (紹介編)Web サーバーを ConoHa に移行しました
  2. ConoHa で oyasu.info 向けウェブサーバーの構築・インストール編
  3. (この記事)nginx で php-fpm と spawn-fcgi(perl)を UNIX ドメインソケットで利用する
  4. (公開予定)ConoHa で oyasu.info 向けウェブサーバーの構築・データ移転編

時間がたってしまいましたが、前回インストールした CentOS 7サーバーで、最新版のnginxやPHPを使用したウェブサイトの表示までを目的とします。

今回設定するもの

  • ドメインウェブ:nginx
  • PHP:php-fpm
  • Perl:perl-CGI、fcgiwrap、spawn-fcgi

Apache でサーバーを構築する際は、LoadModule でモジュールを読み込めば利用できたのですが、nginxではソケット通信を使用します。

nginx で利用できるソケットは2種類あります。

  • TCP ソケット
  • UNIX ドメインソケット

技術的なことは省略しますが、UNIX ドメインソケットのほうがパフォーマンスが良いとのことで、今回はドメインソケットを利用します。

nginx ドメインウェブの設定

前回はIPアドレスを入力するとnginxのデフォルトのページが表示されていました。
しかし、一般公開時はウェブ公開用のドメインだけページを表示し、それ以外の場合は何も表示しないように変更します。

ドメイン別 conf ファイル作成

このサーバーは、oyasu.info、blog.oyasu.info のドメインでウェブサーバーを公開しており、それぞれ違うconfファイルを設定しています。
一つのファイルにまとめて書くこともできますが、設定を分けるためにも別のファイルを使用します。

デフォルトのファイルをベースに複製します。

cd /etc/nginx/conf.d/
cp default.conf oyasu.info.conf
cp default.conf blog.oyasu.info.conf

特に設定せずに自動的に認識されます。
それぞれの conf ファイルはこのように作成します。

server {
    listen       80 default_server;
    server_name blog.oyasu.info;
    root   /usr/share/nginx/blog.oyasu.info;

    access_log  /var/log/nginx/blog.oyasu.info.access.log  main;

    location / {
        #root   /usr/share/nginx/html;
        try_files $uri $uri/ /index.php?$args;
        index  index.php index.html index.htm;
    }
}

アクセスログはサブドメイン別に作成しています。

root を location の中に書かず、server の下に書いています。
あとで紹介しますが、PHP や CGI に関する記述を追加する際に、location 内に書いているとまた宣言しなければならないため、server の下に書いています。

また、try_files は WordPress を動作させるときの設定です。通常のウェブサイトである oyasu.info には使用していません。

参考:Nginx – WordPress Codex 日本語版

IP アドレス直接入力対策

/etc/nginx/conf.d/default.conf で return 444; の行を追加するだけで OK です。
これ以降の記述はすべて削除してもかまいません。

server {
    listen       80 default_server;
    server_name  _;
    return 444;
}

参考:How nginx processes a request

設定が終わったら再起動します。

systemctl restart nginx

IPアドレスを直接入力したときに、このようにエラーメッセージが表示されれば OK です。

[H28.08.12] IP アドレス直接入力エラー

何らかの原因で nginx が起動していないや接続できない場合は、ページが応答していませんといった別の内容になることから、サーバーが正常に動作しており、何も応答が返されない状態であることがわかります。

php-fpm

nginx で PHP を動作させるためにインストールした php-fpm の設定を行います。

php-fpm の conf ファイル設定

php-fpm の設定ファイルである /etc/php-fpm.d/www.conf を更新します。

具体的には、こちらの点を書き換えました。

[www]
; group = apache
; user = apache
; 今回はnginxとして動作させるため変更
group = nginx
user = nginx

; listen = 127.0.0.1:9000
; UNIXドメインソケットの利用に変更
listen = /var/run/php-fpm/php-fpm.sock;

; ドメインソケットのパーミッション(設定変更しなくても動作する可能性も)
listen.mode = 0666

php-fpm ではありませんが、PHP 全体の設定 /etc/php.ini も修正します。

[PHP]
;upload_max_filesize = 2M
upload_max_filesize = 5M

ファイルのアップロード上限を 2MB から 5MB に変更しました。
WordPress の画像リサイズ機能に頼り、カメラで撮影した高解像度の写真をそのままアップするときに便利です。
バックアップデータをファイルで復元する場合、これでも足りない可能性があります。

書き換えが終わったら、php-fpmを再起動します。

systemctl restart php-fpm

nginx に php-fpm の設定を追加

次に、nginxの設定ファイルを変更します。

/etc/nginx/conf.d/ にある各ドメインの conf ファイルにこのような記述を加えます。

server {
   location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        include fastcgi_params;
    }
}

perl-CGI、fcgiwrap、spawn-fcgi インストール

Nginx で Perl を扱うために必要なものをインストールします。

yum -y install fcgi-devel autotools automake perl-CGI git gcc
#cd /usr/local/src/
git clone git://github.com/gnosek/fcgiwrap.git
cd fcgiwrap
autoreconf -i
./configure
make
make install
yum -y install spawn-fcgi

spawn-fcgiの設定

/etc/sysconfig/spawn-fcgi をこのように書き換えます。

FCGI_SOCKET=/var/run/fcgiwrap.socket
FCGI_PROGRAM=/usr/local/sbin/fcgiwrap
FCGI_USER=nginx
FCGI_GROUP=nginx
FCGI_EXTRA_OPTIONS="-M 0776"
OPTIONS="-u $FCGI_USER -g $FCGI_GROUP -s $FCGI_SOCKET -S $FCGI_EXTRA_OPTIONS -F 1 -P /var/run/spawn-fcgi.pid -- $FCGI_PROGRAM"

同様に、nginx の conf ファイルも編集します。

server {
    location ~ \.cgi$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/fcgiwrap.socket;
        fastcgi_index index.cgi;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
}

そして、spawn-fcgi を起動すると利用できます。

systemctl enable spawn-fcgi
systemctl start spawn-fcgi

まとめ

これにより、ConoHa で oyasu.info のウェブサーバーの土台が完成しました。
PHP についてはたくさん情報があるのですが、Perl については情報が少なかったです。

実は MySQL も UNIX ソケット通信が可能なようです。
いままで共用サーバーを使用していた関係で、wp-config.php も TCP ソケットを利用してきました。
簡単にできるようであれば対応したいです。


Comments

comments

コメントを残す

メールアドレスが公開されることはありません。

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)