レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

Nginx + php-fpm でWordPressを動かしてみる

2011年6月16日 2015年5月16日
wordpress nginx php-fpm

ここまで、nginx + php-fpmのインストールと簡単なセットアップ方法について解説してきました。


CentOS / ScientificLinux

Debian / Ubuntu

今回は、nginx + php-fpmの環境下で、WordPressを動かしてみましょう。

ウェブサーバー(nginx)、PHP (php-fpm)、MySQLが動作すれば、WordPressも動作するはずです。

MySQLのセットアップは、ここでは解説しません。あえてmysql5.1系をインストールするなどの記事を参照ください。

結論から言うと、
nginxの設定ファイル(/etc/nginx/nginx.conf)を

     # serverタグで各サーバーの設定情報を記述します。
    server {
        listen       80;
        server_name www.example.com;
        index       index.php index.html index.htm;
        root        /var/www/html;
        charset     utf-8;
        access_log  /var/log/httpd/www.example.com.access.log;
        error_log   /var/log/httpd/www.example.com.error.log;

        try_files $uri $uri/ /index.php?q=$uri&$args;

        location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
        }
    }

のように文字部分を追加するだけで、Wordpress自体は動作します。
ここでは、この簡単な解説と、アクセスログのWordpressの設定について解説してみます。

nginx + php-fpm でWordpressを動かす時の注意点

nginx + php-fpm でWordpressを動かす場合の注意点がいくつかあります。
その注意点は、apacheで動作させる場合は、.htaccessやhttpd.confで対応していた問題を、nginxでは、すべて設定ファイル(/etc/nginx/nginx.conf)で対応しなければいけないことです。

ここでは、以下の2点について、簡単に解説してみます。


パーマリンク設定の問題

Wordpressでは、パーマリンク設定では、自由にパーマリンクを設定できます。あたかもカテゴリをディレクトリのように見せることも、記事を静的ページに見せることもできます。
つまり、ウェブサーバーは、存在しないディレクトリ名やファイル名にアクセスされた場合、エラー404を出力します。
もちろん、nginxでも、何も設定しない場合は、以下のように404エラーを出力します。
nginxの404

そんな時、apache、nginxでは、どのような設定になるか簡単に解説してみます。

apache での設定例

通常、apacheでは、.htaccessにて、以下のような記述を行って対応します。

1
2
3
4
5
6
7
8
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

これは、以下のような意味になります。

  • 4行目:要求ファイル名が、index.phpなら、そのまま処理を続けなさい。
  • 5 – 7行目:要求ファイル名が存在しないか、要求ディレクトリ名が存在しない場合、/index.phpを処理しなさい。

nginx での設定例

先の意味は、
「要求されたファイルやディレクトリが存在しないなら/index.phpを処理しなさい。」
ということで、これをnginxでは、以下の1行で実現することができます。

1
try_files $uri $uri/ /index.php?q=$uri&$args;
try_files
最後のパラメータ(ここでは、/index.php?q=$uri&$args;)以外のパラメータ( ここでは、$uri $uri/)が存在するかどうか確認します。
存在しない場合は、最後のパラメータで指定した処理を実施しなさい。
という意味になります。
$uri
URLのホスト名以降(パラメータ情報を除く)の情報
$args
URLに指定されたパラメータ情報

アクセスログの問題

アクセスログの制限を何もしない場合、どんなファイルへのアクセスもロギングされて、無駄な情報でファイルサイズが大きくなったり、本来必要なアクセスログが埋もれてしまうこともあります。
そんな時、apache、nginxでは、どのような設定になるか簡単に解説してみます。

apache での設定例

apacheでは、httpd.confの中でロギングの条件を設定することができます。
Wordpressを利用されておられる方なら、他人によっても異なりますが、概ね以下のような設定をしておられるのではないでしょうか。
何を隠そう自分も、apacheの場合、そのまんまこの設定をしています。

1
2
3
4
5
6
7
8
9
SetEnvIf Request_URI "\.(gif)|(jpg)|(png)|(ico)|(css)|(js)$" nolog
SetEnvIf Request_URI "/wp-admin(.*)" nolog
SetEnvIf Request_URI "/wp-content(.*)" nolog
SetEnvIf Request_URI "/wp-includes(.*)" nolog
SetEnvIf Request_URI "/wp-cron.php(.*)" nolog
SetEnvIf Request_URI "/wp-login.php(.*)" nolog
SetEnvIf Request_URI "/wp-comments(.*)" nolog
...
CustomLog /var/log/httpd/httpd-access.log combined env=!nolog

これは、以下のような意味になります。

  • 1行目:要求ファイル名の拡張子が、.gif .jpg .png .ico .css .jsなら、nologフラグを設定します。
  • 2 – 7行目:要求ファイル名(あるいはディレクトリ名)に、
    • /wp-admin
    • /wp-content
    • /wp-includes
    • /wp-cron.php
    • /wp-login.php
    • /wp-comments
    が含まれるなら、nologフラグを設定します。
  • 11行目:nologフラグが設定されていないなら、httpd-access.logへロギングします。

nginx での設定例

これを、nginxで実現しようとすると、設定ファイル(/etc/nginx/nginx.conf)を以下のように編集しなければなりません。
このとき使うのは、access_log off;(アクセスログ情報をクリアする)です。

     # serverタグで各サーバーの設定情報を記述します。
    server {
        listen       80;
        server_name www.example.com;
        index       index.php index.html index.htm;
        root        /var/www/html;
        charset     utf-8;
        access_log  /var/log/httpd/www.example.com.access.log;
        error_log   /var/log/httpd/www.example.com.error.log;

        try_files $uri $uri/ /index.php?q=$uri&$args;

        location ~* \.(gif|jpg|png|ico|css|js)$ {
            access_log        off;
        }
        location ~ /wp-admin {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }
        location ~ /wp-content {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }
        location ~ /wp-includes {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }
        location ~ /wp-cron.php {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }
        location ~ /wp-login.php {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }
        location ~ /wp-comments {
            access_log     off;
            location ~ \.php$ {
               fastcgi_pass   127.0.0.1:9000;
               fastcgi_index  index.php;
               fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
               include        fastcgi_params;
            }
        }


        location ~ \.php$ {
           fastcgi_pass   127.0.0.1:9000;
           fastcgi_index  index.php;
           fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
           include        fastcgi_params;
        }
    }

部分が、編集箇所です。
ちょっと、だらだらと長いですね。
基本的にlocaltionでは、そのスコープ内で処理を済ませる必要があるので、このような長い記述になってしまいました。
if文なども使えますが、そのif文のスコープでは、access_logなどのディレクティブが使えないなどの条件があります。

そこで有効に使えるのがincludeです。
includeは、指定したファイルを自動的に読み込んでくれます。
ここでは、オレンジ部分が全て同じ設定です。これを1つのファイルにして、includeを使うと見やすくなります。

まず、オレンジ部分をphp_execというファイル名で/etc/nginx/のディレクトリに作成します。 つまり、/etc/nginx/php_execは、以下のような内容になります。

location ~ \.php$ {
   fastcgi_pass   127.0.0.1:9000;
   fastcgi_index  index.php;
   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
   include        fastcgi_params;
}

次に、上記の設定ファイル(/etc/nginx/nginx.conf)を編集しなおすと以下のようになります。

     # serverタグで各サーバーの設定情報を記述します。
    server {
        listen       80;
        server_name www.example.com;
        index       index.php index.html index.htm;
        root        /var/www/html;
        charset     utf-8;
        access_log  /var/log/httpd/www.example.com.access.log;
        error_log   /var/log/httpd/www.example.com.error.log;

        try_files $uri $uri/ /index.php?q=$uri&$args;

        location ~* \.(gif|jpg|png|ico|css|js)$ {
            access_log        off;
        }
        location ~ /wp-admin {
            access_log     off;
            include        php_exec;
        }
        location ~ /wp-content {
            access_log     off;
            include        php_exec;
        }
        location ~ /wp-includes {
            access_log     off;
            include        php_exec;
        }
        location ~ /wp-cron.php {
            access_log     off;
            include        php_exec;
        }
        location ~ /wp-login.php {
            access_log     off;
            include        php_exec;
        }
        location ~ /wp-comments {
            access_log     off;
            include        php_exec;
        }

        include        php_exec;

どうですか?
結構、すっきりしましたね。


今回は、ここまでです。

nginxの設定は、apacheに似せて設定することもできるようになっていますが、独自処理、高速化を優先させるような設定を推奨しています。

例えば、apacheで以下のような設定を
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
nginxで以下のようにも設定できます。(非推奨)
if (!-e $request_filename) {
	rewrite ^(.+)$  /index.php last;
}
if (!-d $request_filename) {
	rewrite ^(.+)$  /index.php last;
}
これなら、似てますね。非推奨ですけど。

nginxの設定は、意外と知られていないような設定もあるみたいです。
いろいろと設定を工夫すれば、もっとすっきりとした設定ができると思います。

軽いので、いろいろと試せすのが苦にならないのも良いですね。

nginxでWordpress を動かしてみたい方で、うまく動作しない方は、ここでの設定が参考になればうれしく思います。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編)

今回は、CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを ...

CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを動かすまで(Nginx編)

今回は、最短でLAMPインストールし、Wordpressを動かすまでの手順について解説してみたいと思います。 とりあえず、CentOS / S ...

Nginx で Wordpress を使う時の注意点

Nginx 上で WordPress を動作される場合、いろいろな注意点があります。 今回は、その注意点について、簡単に解説してみたいと思いま ...

Windowsで(L)AMP(Nginx,MySQL,PHP)インストールからWordpressを動かすまで

Windowsで(L)AMP(Apache,MySQL,PHP)インストールからWordPressを動かすまで では、Windows に Apa ...

Nginx でPHPを動かす(php-fpmをバイナリパッケージ(rpm)を作成し、インストールする) [PHP5.2系の場合]

前回の「Nginxの最新版ソースから バイナリパッケージ(rpm)を作成し、インストールする」に続けて、nginxと一緒にPHPを動作させたいと ...



コメントを投稿 :

お名前 *

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

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.3006 [s]