このブログは Mountain Lion + nginx + WordPress な環境で動いています。これはその設定をしたときのメモです。
nginx のインストール・設定
基本的なことは今まで書いた記事を見てもらった方がいいかもしれません。
nginx | blog.delphinus.dev
https://blog.delphinus.dev/category/unix/nginx
今回用意した nginx の設定ファイルはこんな感じです。基本的に、標準の設定ファイルをコピペしただけですね。
server { listen 80; server_name blog.delphinus.dev; access_log /var/log/nginx/blog-access.log; error_log /var/log/nginx/blog-error.log; root /Library/WebServer/Applications/wordpress; index index.php; location / { if (-f $request_filename) { expires 30d; break; } if (!-e $request_filename) { # wordpress files rewrite ^.+?($/wp-.*) $1 last; rewrite ^.+?(/.*\.php)$ $1 last; rewrite ^ /index.php last; } } location ~ \.php$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SERVER_PORT 80; fastcgi_param SERVER_NAME blog.delphinus.dev; } location ~ /\.ht { deny all; } }
色を付けた部分は、各記事の URL に付く index.php
を消すためのものです。
今回は Movable Type からの移行と言うことで、パーマリンクをそのまま引き継いで WordPress にコンバートしました。そのためには、パーマリンク設定にて以下のような書式を設定する必要があります。
https://blog.delphinus.dev/%year%/%monthnum%/%postname%.html
標準では https://blog.delphinus.dev/
の後に index.php
が挟まってしまいますので、nginx の rewrite モジュールで対処しています。
php-fpm の設定
php-fpm ってのは PHP FastCGI Process Manager の略で、FastCGI 下で動く、PHP プロセスの管理デーモンです。FastCGI ってのはプロセスの永続化によりレスポンスの改善とメモリ使用率の効率化を……ってここら辺は解説記事貼った方が分かりやすいでしょう。
FastCGI – Wikipedia
http://ja.wikipedia.org/wiki/FastCGI
今回使用した Web サーバー nginx には標準で FastCGI モジュールが組み込まれていますので、php-fpm をそれと連携するように起動させると PHP を FastCGI 環境下で動かすことが出来ます。
PHP 及び、php-fpm は Mountain Lion 標準のものを利用しました。各バージョン・パスは次のようになっています。
$ which php /usr/bin/php $ which php-fpm /usr/sbin/php-fpm $ php --version PHP 5.3.19 (cli) (built: Nov 22 2012 07:18:00) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies $ php-fpm --version PHP 5.3.19 (fpm-fcgi) (built: Nov 22 2012 07:20:23) Copyright (c) 1997-2012 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
PHP 自体は /etc/php.ini
をコピーして用意するだけで利用可能です。
$ sudo cp /etc/php.ini.rpmsave /etc/php.ini
php-fpm の方は標準の設定ファイルでは使えないので、編集する必要があります。
include=/etc/php-fpm.d/\*.conf [global] pid = /var/run/php-fpm/php-fpm.pid error_log = /var/log/php-fpm/error.log
[www] user = _www group = nobody listen = 127.0.0.1:9000 pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3
/etc/php-fpm.conf
一つにまとまっていたファイルを 2 つに分けました。内容自体は基本的なものしか設定していません。
重くなってきたらこの辺を参考にしてチューニングしてみます。
» nginx+PHP-FPMでどこまでチューニングできるか Network is unreachable
http://blog.kubox.info/?p=175
php-fpm の起動スクリプト
Mac らしく、サービスの起動は launchd で管理してみます。次のファイルを作成します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>KeepAlive</key> <false/> <key>Label</key> <string>delphinus.php-fpm</string> <key>ProgramArguments</key> <array> <string>/usr/sbin/php-fpm</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist>
Homebrew でインストールされた nginx の plist
ファイルを参考にしています。
これも nginx を設定したとき と同じく、プロセスの終了を認識できないようなので、再起動するときは自前で確認しないといけません。
# 起動 $ sudo launchctl load /Library/LaunchDaemons/delphinus.php-fpm.plist # 再起動 $ sudo launchctl unload /Library/LaunchDaemons/delphinus.php-fpm.plist $ sudo kill `cat /var/run/php-fpm.pid` $ sudo launchctl load /Library/LaunchDaemons/delphinus.php-fpm.plist
nginx を起動する
これで全ての設定が出来ました。nginx を起動すると WordPress にアクセスできます。
# 起動 $ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist # 再起動 $ sudo launchctl unload /Library/LaunchDaemons/homebrew.mxcl.nginx.plist $ sudo kill `cat /usr/local/var/run/nginx.pid` $ sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.nginx.plist