WordPress高速化: 最適化後のnginxの設定一覧

本

前回はWordPress高速化の結果をグラフ化してまとめて見ました。

今回はWordPress向けのnginxの設定ファイルを紹介したいと思います。

システム構成

今回設定を行ったシステムは次のようになっています。

  • サーバ: ServersMan@VPSスタンダード
  • OS: Debian GNU/Linux 6.0.7
  • Webサーバ: nginx 1.2.8
  • CMS: WordPress 3.3.2

Debianの6.0.7(squeeze)を使っているので、nginxとWordPressが古いのがちょっと気になります。これはおいおいアップデートしたいと思います。

ファイルの構成

nginx設定ファイル

私のnginxの設定ファイルは、Debianの設定ファイル構成なので次のようになっています。

  • /etc/nginx/
    • nginx.conf : nginxの設定ファイルの本体。このファイルからさまざまな設定ファイルをさらに読み込む。
    • mime.types : mime-typeの設定。特に変更は不要。
    • fastcgi_params : fastcgiの設定。
    • proxy_params : プロキシ・キャッシュの基本設定。
    • conf.d/ : nginxの項目別の設定。このディレクトリの.confファイルは自動的にnginx.confから読み込まれ、有効になる。
      • php-fpm.conf : php-fpmの設定ファイル
    • global/ : nginxで利用する設定ファイル。必要に応じて各サイトの設定ファイルから読み込む。
      • restrictions.conf : 共通の制限事項を記載したファイル
      • wordpress-ms.conf : マルチサイト設定のWordPressを使うための設定ファイル
      • wordpress-ms-wp-super-cache.conf : マルチサイト設定のWordPressでWP Super Cacheプラグインを使うための設定ファイル
      • wordpress-proxy-cache.conf : マルチサイト設定のWordPressでプロキシ・キャッシュを使うための設定ファイル
    • sites-available/ : 各サイトの設定。ngxensiteコマンドで有効にすると、sites-enabledにシンボリックリンクができる
    • sites-enabled/ : nginxで有効になっているサイトの設定。このディレクトリのファイルはすべてnginx.cofから読み込まれる。ngxdissiteコマンドで無効にできる。
      • scratchpad-blog : sites-available/scratchpad-blogへのシンボリックリンク
      • scratchpad-blog-ssl : sites-available/scratchpad-blog-sslへのシンボリックリンク
      • scratchpad : sites-available/scratchpadへのシンボリックリンク
      • scratchpad-books : sites-available/scratchpad-booksへのシンボリックリンク
      • scratchpad-colinux : sites-available/scratchpad-colinuxへのシンボリックリンク
      • scratchpad-debian : sites-available/scratchpad-debianへのシンボリックリンク

WordPressファイル

DebianでWordPressをインストールすると次のようなファイル配置になります。なお、設定ファイルは/etc/wordpress以下に置かれます

  • /usr/share/wordpress/ : WordPressのベースディレクトリ
    • wp-content/ : WordPressのコンテンツ関係のファイルが置かれているディレクトリ
      • blogs.dir : アップロードしたブログのデータが保存されるディレクトリ。
        Debianでは/var/lib/wordpress/blogs.dirへのシンボリックリンク
      • cache/ : WP Super Cacheプラグインがキャッシュデータを置くディレクトリ
      • plugins : プラグインがインストールされるディレクトリ
  • /var/lib/wordpress/blogs.dir/ : アップロードしたブログのデータが実際に保存されるディレクトリ
    Debianではこのディレクトリにデータ保存されるが、私の環境では/www以下に保存するようにしている。
    • scratchpad.jp : /www/uploads/scratchpad.jpへのシンボリックリンク

コンテンツファイル

いろいろな経緯があり、私のサーバでは次のように各コンテンツのファイルが配置されています。

Debianのデフォルトでは/var/www以下にコンテンツファイルを置くことになっていると思いますが、私は/www以下に置くようにしています。

  • /www : nginxで公開するデータを保管するディレクトリ
    • scratchpad/ : http://scratchpad.jp/のデータ
    • scratchpad.jp : /usr/share/wordpressへのシンボリックリンク
    • uploads/ : WordPressでアップロードしたデータが実際に格納されるディレクトリ
      • scratchpad.jp/ : このブログ用にアップロードしたデータ
        • favicon.ico : このブログのFaviconファイル。手動でここに置いた。
        • sitemap.xml : このブログのサイトマップファイル。XML Sitemap Generatorプラグインでここにファイルができるようにしている。

nginxの設定ファイルの中身

それでは各設定ファイルをさらしていきます。

一応、動いている設定ですが、間違っているかもしれません。コピペする方はご自分の責任でお願いいたします。

nginx.conf

これはDebianのnginxパッケージをそのまま使っています。コメントだけ追記しておきます。

user www-data www-data;
worker_processes 4;
pid /var/run/nginx.pid;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {
        ##
        # Basic Settings
        ##
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # Logging Settings
        ##
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##
        gzip on;
        gzip_disable "msie6";

        ##
        # Virtual Host Configs
        ##
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

mime.types

これはDebianのnginxパッケージをそのまま使っています。長いので省略します。

types {
        text/html                               html htm shtml;
        text/css                                css;
        text/xml                                xml rss;
        image/gif                               gif;
        image/jpeg                              jpeg jpg;
        application/x-javascript                js;
        application/atom+xml                    atom;
...

fastcgi_params

これはDebianのnginxパッケージをそのまま使っています。

fastcgi_param   QUERY_STRING            $query_string;
fastcgi_param   REQUEST_METHOD          $request_method;
fastcgi_param   CONTENT_TYPE            $content_type;
fastcgi_param   CONTENT_LENGTH          $content_length;

fastcgi_param   SCRIPT_FILENAME         $request_filename;
fastcgi_param   SCRIPT_NAME             $fastcgi_script_name;
fastcgi_param   REQUEST_URI             $request_uri;
fastcgi_param   DOCUMENT_URI            $document_uri;
fastcgi_param   DOCUMENT_ROOT           $document_root;
fastcgi_param   SERVER_PROTOCOL         $server_protocol;

fastcgi_param   GATEWAY_INTERFACE       CGI/1.1;
fastcgi_param   SERVER_SOFTWARE         nginx/$nginx_version;

fastcgi_param   REMOTE_ADDR             $remote_addr;
fastcgi_param   REMOTE_PORT             $remote_port;
fastcgi_param   SERVER_ADDR             $server_addr;
fastcgi_param   SERVER_PORT             $server_port;
fastcgi_param   SERVER_NAME             $server_name;

fastcgi_param   HTTPS                   $https;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param   REDIRECT_STATUS         200;

proxy_params

これはDebianのnginxパッケージをそのまま使っています。

proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

php-fpm.conf

自分で作成したファイルです。バックエンドサーバにphp_backendという名前をつけています。このバックエンドサーバにUnixドメインソケットで接続します。

# PHP処理用のバックエンドの設定
# unixドメインソケットで接続する
upstream php_backend {
    server unix:/var/lib/php5/php-fpm.sock;
}

restrictions.conf

各サイトで共通の制限事項を記載したファイルです。

# 共通の制限を記載したファイル
# serverブロックからインクロードして利用する

# GET|HEAD|POSTメソッドのみアクセスを許可する
# (DELETE, SEARCH等はアクセス拒否)
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
    return 444;
}

# favicon.icoへのアクセスはログに記録しない
location = /favicon.ico {
    log_not_found off;
    access_log off;
}

# robots.txtへのアクセスはログに記録しない
location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

# 「.」で始まるファイル(.htaccess, .htpasswd等)へのアクセスは拒否しない
# ログは記録しておく
location ~ /\. {
    deny all;
}

# アップロード用ディレクトリ内のphpファイルへのアクセスは拒否する
# この設定はサブディレクトリもチェックするので、マルチサイト設定でも有効
# ログは記録しておく
location ~* /(?:uploads|files)/.*\.php$ {
    deny all;
}

# バッファオーバフローを避けるため、上限を設定。
# 参考: http://www.cyberciti.biz/tips/linux-unix-bsd-nginx-webserver-security.html
client_body_buffer_size  1K;
client_header_buffer_size 1k;
client_max_body_size 25M;
large_client_header_buffers 4 16k;

# 怪しいサイトからのリンクは拒否
if ( $http_referer ~* (babes|forsale|girl|jewelry|love|nudit|organic|poker|porn|sex|teen) )
{
    return 403;
}

wordpress-ms.conf

nginxでWordPressを動かすための設定ファイルです。マルチサイトに対応しています。

# マルチサイト(subdirectory/domain)のWordPress用設定を記載したファイル
# serverブロックからインクロードして利用する
# 参考: http://codex.wordpress.org/Nginx
# 参考: http://nskw-style.com/2011/server/codex-nginx-translation-try.html

# 以降に記載したルールにすべてマッチしなかった場合のデフォルトの設定
location / {
    index index.php;
    try_files $uri $uri/ /index.php?$args;
}

# これらのファイルはexpires headersを送りWebブラウザにキャッシュさせる
# 404エラーのログは記録しない
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires 24h;
    log_not_found off;
}

# WordPressディレクトリのblogs.dir以下への直接アクセスは禁止
location ^~ /blogs.dir {
    internal;
    alias /var/lib/wordpress/blogs.dir/$host ;
    access_log off;
    log_not_found off;
    expires max;
}

# マルチサイト用:
# パフォーマンス向上のために、正しいサブディレクトリ構造へのシンボリックリンクを作成するプラグインを使用する。
set $cachetest "$document_root/wp-content/cache/ms-filemap/${host}${uri}";
if ($uri ~ /$) {
    set $cachetest "";
}
if (-f $cachetest) {
    # URIを書き換え、以降の書き換え処理を停止する。
    rewrite ^ /wp-content/cache/ms-filemap/${host}${uri} break;
}

if ($uri !~ wp-content/plugins) {
    rewrite /files/(.+)$ /wp-includes/ms-files.php?file=$1 last;
}

# キャッシュ用プラグインを使用する。
include global/wordpress-ms-wp-super-cache.conf;
#include global/wordpress-ms-w3-total-cache.conf;

# マルチサイト用に'.../wp-.*'と'.../*.php'を書き換える
# Rewrite multisite '.../wp-.*' and '.../*.php'.
if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 last;
    rewrite ^/[_0-9a-zA-Z-]+(/.*\.php)$ $1 last;
}

### マルチサイト用に特定のURIを書き換え
# これがないとアップロードしたjpgファイル等が見えなくなる
rewrite ^/uploads/(.*)$   /wp-content/blogs.dir/$host/$1;
# favicon.icoは各サイトのルート直下に置く
rewrite ^/(.*)(favicon.ico$) /wp-content/blogs.dir/$host/favicon.ico;
# sitemap.xmlは各サイトのルート直下に置く
rewrite ^/sitemap.xml$       /wp-content/blogs.dir/$host/sitemap.xml;

# すべての.phpファイルはバックエンドに送る
location ~ \.php$ {
        # ファイルが存在しない場合は404エラー
        # 参照: http://forum.nginx.org/read.php?2,88845,page=3
        try_files $uri =404;

        fastcgi_split_path_info ^(.+\.php)(/.+)$;

        fastcgi_send_timeout  5m;
        fastcgi_read_timeout 5m;
        fastcgi_connect_timeout 5m;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_pass php_backend;
}

wordpress-ms-wp-super-cache.conf

nginxとWordPressのWP Super Cacheプラグインを併用するための設定ファイルです。マルチサイトに対応しています。

### WP Super Cache用のルール
### "wordpress-ms-..."ファイルからインクルードして利用する

# .gzで圧縮されたコンテンツをサポートする
gzip_static on;

# デフォルトではWP Super Cacheキャッシュデータがあれば使用する
set $supercacheuri "";
set $supercachefile "$document_root/wp-content/cache/supercache/${http_host}${uri}index.html";
if (-e $supercachefile) {
    set $supercacheuri "/wp-content/cache/supercache/${http_host}${uri}index.html";
}

# POSTリクエストならWP Super Cacheのキャッシュデータを使わない
if ($request_method = POST) {
    set $supercacheuri "";
}

# クエリ文字列があったらWP Super Cacheのキャッシュデータを使わない
if ($query_string) {
    set $supercacheuri "";
}

# 次の特別なURIはWP Super Cacheのキャッシュデータを使わない
if ($request_uri ~* "(/wp-admin/|/xmlrpc.php|/wp-(app|cron|login|register|mail).php|wp-.*.php|/feed/|index.php|wp-comments-popup.php|wp-links-opml.php|wp-locations.php|sitemap(_index)?.xml|[a-z0-9_-]+-sitemap([0-9]+)?.xml)") {
    set $supercacheuri "";
}

# コメントしたユーザだったらWP Super Cacheのキャッシュデータを使わない
if ($http_cookie ~* comment_author_|wordpress_logged_in|wp-postpass_) {
    set $supercacheuri "";
}

### 以降 モバイルユーザの判定
### モバイルユーザの場合はWP Super Cacheのキャッシュデータを使わない

# WAP端末かどうか
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
    set $supercacheuri "";
}

#  携帯端末かどうか(?)
if ($http_profile ~ ^[a-z0-9\"]+) {
    set $supercacheuri "";
}

# モバイルブラウザかどうか その1
if ($http_user_agent ~* (2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|iPhone|iPod|Android|BlackBerry9530|LG-TU915\ Obigo|LGE\ VX|webOS|Nokia5800)) {
    set $supercacheuri "";
}

# モバイルブラウザかどうか その2
if ($http_user_agent ~* (w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-)) {
    set $supercacheuri "";
}

# モバイルブラウザかどうか その3
if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) {
    set $supercacheuri "";
}

#  その他携帯端末・ゲーム・PDAかどうか
if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) {
    set $supercacheuri "";
}
### モバイルユーザの判定終了

# 有効なWP Super Cacheのキャッシュデータがあれば処理終了
if ($supercacheuri) {
    rewrite ^ $supercacheuri break;
}

wordpress-proxy-cache.conf

WordPressにnginxのプロキシ・キャッシュを提供するための設定ファイルです。

# デフォルトはproxy_cacheを使用する
set $do_not_cache 0;

# proxy_cacheを管理するためのキーを設定
set $proxy_cache_key " $scheme$proxy_host$request_uri";

# phpファイルの場合はproxy_cacheを使用しない
if ($uri ~* "\.php$") {
    set $do_not_cache 1;
}

### 以降 モバイルユーザの判定
###
### WordPressの表示をモバイルと通常で切り替えている場合は、
### モバイルユーザの場合は基本的にproxy_cacheを使用しない。
###
### ただし、iPhone, iPod, Androidの場合は、
### proxy_cache_keyを切り替えて別キャッシュを利用する。

# WAP端末かどうか
if ($http_x_wap_profile ~ ^[a-z0-9\"]+) {
    set $do_not_cache 1;
}

#  携帯端末かどうか(?)
if ($http_profile ~ ^[a-z0-9\"]+) {
    set $do_not_cache 1;
}

#  モバイルブラウザかどうか その1
if ($http_user_agent ~ ^.*(2.0\ MMP|240x320|400X240|AvantGo|BlackBerry|Blazer|Cellphone|Danger|DoCoMo|Elaine/3.0|EudoraWeb|Googlebot-Mobile|hiptop|IEMobile|KYOCERA/WX310K|LG/U990|MIDP-2.|MMEF20|MOT-V|NetFront|Newt|Nintendo\ Wii|Nitro|Nokia|Opera\ Mini|Palm|PlayStation\ Portable|portalmmm|Proxinet|ProxiNet|SHARP-TQ-GX10|SHG-i900|Small|SonyEricsson|Symbian\ OS|SymbianOS|TS21i-10|UP.Browser|UP.Link|webOS|Windows\ CE|WinWAP|YahooSeeker/M1A1-R2D2|BlackBerry9530|LG-TU915\ Obigo|LGE
\ VX|webOS|Nokia5800).*) {
    set $do_not_cache 1;
}

#  モバイルブラウザかどうか その2
if ($http_user_agent ~ ^(w3c\ |w3c-|acs-|alav|alca|amoi|audi|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-|dang|doco|eric|hipt|htc_|inno|ipaq|ipod|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-|lg/u|maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|palm|pana|pant|phil|play|port|prox|qwap|sage|sams|sany|sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo|teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|wap-|wapa|wapi|wapp|wapr|webc|winw|winw|xda\ |xda-).*) {
    set $do_not_cache 1;
}

#  携帯端末かどうか
if ($http_user_agent ~ ^(DoCoMo/|J-PHONE/|J-EMULATOR/|Vodafone/|MOT(EMULATOR)?-|SoftBank/|[VS]emulator/|KDDI-|UP\.Browser/|emobile/|Huawei/|IAC/|Nokia|mixi-mobile-converter/)) {
    set $do_not_cache 1;
}

#  その他携帯端末・ゲーム・PDAかどうか
if ($http_user_agent ~ (DDIPOCKET\;|WILLCOM\;|Opera\ Mini|Opera\ Mobi|PalmOS|Windows\ CE\;|PDA\;\ SL-|PlayStation\ Portable\;|SONY/COM|Nitro|Nintendo)) {
    set $do_not_cache 1;
}
### モバイル端末の判定終了

## Androidの場合は別キャッシュを使う
if ($http_user_agent ~ ^.*(Android).*) {
    set $proxy_cache_key "mobile::$proxy_cache_key";
}

## iPhone/iPodの場合は別キャッシュを使う
if ($http_user_agent ~ ^.*(iPhone|iPod).*) {
    set $proxy_cache_key "mobile::$proxy_cache_key";
}

# コメントしたユーザだったらWP Super Cacheのキャッシュデータを使わない
if ($http_cookie ~ "(wordpress_logged_in_|comment_author_)(.*)") {
    set $do_not_cache 1;
}

### 以上の設定にしたがってproxy_cache機能を利用する
location / {
    proxy_no_cache $do_not_cache;
    proxy_cache_bypass $do_not_cache;
    proxy_cache_key $proxy_cache_key;
    proxy_pass http://unix:/var/lib/nginx/proxy.sock;
}

scratchpad-blog

このブログ(http://scratchpad.jp/)の設定ファイルです。

### http://scratchpad.jp の設定

# コンテンツがあるローカルのトップディレクトリの設定
root /www/scratchpad.jp;
# URIにファイルの指定がない場合はindex.phpを見に行く
index index.php;

# nginxのproxy cacheの設定
proxy_cache_path  /var/cache/nginx/scratchpad.jp levels=1:2 keys_zone=scratchpad.jp:64m inactive=1d max_size=512m;
proxy_cache scratchpad.jp;
proxy_cache_valid 200 302 60m; # 正常時のキャッシュ有効時間は60分
include proxy_params; # 共通設定は/etc/nginx/proxy_paramsに記載

# フロントエンドの設定
server {
    # scratchpad.jpに対するポート80への接続を処理する
    listen 80;
    server_name scratchpad.jp;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log  /var/log/nginx/scratchpad-front-error.log warn;
    access_log /var/log/nginx/scratchpad-front-access.log;

    # proxy cacheを有効にする
    include global/wordpress-proxy-cache.conf;
}

# バックエンドの設定
server {
    # unixドメインソケットで接続を待つ
    listen unix:/var/lib/nginx/proxy.sock;

    server_name scratchpad.jp;
    try_files $uri $uri/ /index.php;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log  /var/log/nginx/scratchpad-back-error.log warn;
    access_log /var/log/nginx/scratchpad-back-access.log;

    # 共通の制限事項を設定
    include global/restrictions.conf;

    # URI書き換えのログは記録しない
    rewrite_log off;

    # マルチサイト用WordPressの設定を有効にする
    include global/wordpress-ms.conf;
}

scratchpad-blog-ssl

このブログにSSL接続するための設定ファイルです。

# httpsでの接続時の設定 (WordPressの管理者用画面など)

server {
    # scratchpad.jpに対するポート443への接続を処理する
    listen 443;
    server_name scratchpad.jp;
    root /www/scratchpad.jp;
    index index.php;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log  /var/log/nginx/scratchpad-ssl-error.log warn;
    access_log /var/log/nginx/scratchpad-ssl-access.log;

    # SSLを有効にする
    ssl on;
    ssl_certificate     /etc/ssl/certs/scratchpad.jp.crt;
    ssl_certificate_key /etc/ssl/private/scratchpad.jp.key;

    # 共通の制限事項を設定
    include global/restrictions.conf;

    # マルチサイト用WordPressの設定を有効にする
    include global/wordpress-ms.conf;
}

scratchpad

http://scratchpad.jp/の設定ファイルです。CGIがない静的なWebサイトです。

### http://scratchpad.jp の設定

server {
    # scratchpad.jpに対するポート80への接続を処理する
    listen 80;
    server_name scratchpad.jp;

    # コンテンツがあるローカルのトップディレクトリの設定
    root /www/scratchpad;
    # URIにファイルの指定がない場合にはindex.htmlかindex.htmを表示
    index index.html index.htm;

    # IPアドレスでアクセスしてきたらscratchpad.jpに書き換え
    if ($http_host != "scratchpad.jp") {
        rewrite ^ http://scratchpad.jp$request_uri permanent;
    }

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log /var/log/nginx/scratchpad-error.log notice;
    access_log /var/log/nginx/scratchpad-access.log combined;

    # URI書き換えのログは記録しない
    rewrite_log off;

    # http://scratchpad.jp/colinux/ → http://colinux.scratchpad.jp/ へ変更
    rewrite ^/colinux/(.*) http://colinux.scratchpad.jp/$1 last;
    # http://scratchpad.jp/debian/ → http://debian.scratchpad.jp/ へ変更
    rewrite ^/debian/(.*) http://debian.scratchpad.jp/$1 last;
    # http://scratchpad.jp/books/ → http://books.scratchpad.jp/ へ変更
    rewrite ^/books/(.*) http://books.scratchpad.jp/$1 last;

    # 共通の制限事項を設定
    include global/restrictions.conf;
}

scratchpad-books

http://books.scratchpad.jp/の設定ファイルです。CGIがない静的なWebサイトです。

server {
    # book.scratchpad.jpに対するポート80への接続を処理する
    listen 80;
    server_name books.scratchpad.jp;

    # コンテンツがあるローカルのトップディレクトリの設定
    root /www/scratchpad/books;
    # URIにファイルの指定がない場合にはindex.htmlかindex.htmを表示
    index index.html index.htm;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log /var/log/nginx/scratchpad-books-error.log warn;
    access_log /var/log/nginx/scratchpad-books-access.log combined;

    # 共通の制限事項を設定
    include global/restrictions.conf;
}

scratchpad-colinux

http://colinux.scratchpad.jp/の設定ファイルです。CGIがない静的なWebサイトです。

server {
    # colinux.scratchpad.jpに対するポート80への接続を処理する
    listen 80;
    server_name colinux.scratchpad.jp;

    # コンテンツがあるローカルのトップディレクトリの設定
    root /www/scratchpad/colinux;
    # URIにファイルの指定がない場合にはindex.htmlかindex.htmを表示
    index index.html index.htm;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log /var/log/nginx/scratchpad-colinux-error.log warn;
    access_log /var/log/nginx/scratchpad-colinux-access.log combined;

    # 共通の制限事項を設定
    include global/restrictions.conf;
}

scratchpad-debian

http://debian.scratchpad.jp/の設定ファイルです。CGIがない静的なWebサイトです。

server {
    # debian.scratchpad.jpに対するポート80への接続を処理する
    listen 80;
    server_name debian.scratchpad.jp;

    # コンテンツがあるローカルのトップディレクトリの設定
    root /www/scratchpad/debian;

    # URIにファイルの指定がない場合にはindex.htmlかindex.htmを表示
    index index.html index.htm;

    # ログファイルの設定 エラーは警告レベル以上を記録
    error_log /var/log/nginx/scratchpad-debian-error.log warn;
    access_log /var/log/nginx/scratchpad-debian-access.log combined;

    # 共通の制限事項を設定
    include global/restrictions.conf;
}

その他の設定ファイル

最適化にあたり、RAMディスクを使用したので、次の2行を/etc/fstabに付け加えています。

tmpfs /usr/share/wordpress/wp-content/cache tmpfs size=128m,mode=775,uid=www-data,gid=www-data 0 0
tmpfs /var/cache/nginx tmpfs size=512m,mode=775,uid=www-data,gid=www-data 0 0

まとめ

今回は私のnginx関係の設定ファイルをさらしてみました。

いろいろなサイトの情報を参考にしてこの設定にたどり着きました。正直、正しいのかどうかわからない点も有りますが、WordPressとnginxを組み合わせようという方の参考になれば幸いです。

次回はServersMan@VPSのDebianをアップデートしたいと思います。