Mountain Lion + nginx で WordPress を動かす


このブログは 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

コメントを残す