Nginxの導入と設定(マルチドメイン&カスタムパーマリンク)

一つのサーバしか持っていないけど、複数のドメインで異なるWebを表示させたいので、Nginxをマルチドメインの設定で導入する。

また、WordPressのカスタムパーマリンクが動作せずに、記事のページが404エラーになったり、データのアップロードが1MBまでしかできなくて焦ったので、その解決方法も。

おまけとして、ページ読み込み速度の改善を目的にGoogle提供のPageSpeedモジュールを、使うかわからないけどリバースプロキシのキャッシュ削除でCachePurgeモジュールを、それぞれ組み込んでビルドしちゃうぞ。

  • PageSpeed、CachePurgeを組み込んだNginxの導入
  • マルチドメインとWordPressのカスタムパーマリンク設定
  • NginxのログをLogwatchの対象にする設定

さくらのVPS設定シリーズ、下記も良かったらどうぞ。

追記で設定を大きく見直したので、参考にするならそちらが適切かと。

特に参考にしたのはGoogleのサイトと、UKlabさん。 結局rpmパッケージの作成ができずにmake installしちゃったんだけど、時間を作ってrpmパッケージの作成もチャレンジしてみるよ。

スポンサーリンク

■PageSpeed、CachePurgeを組み込んだNginxの導入

まず、ビルドに必要なライブラリ等のインストール。

$ sudo yum install gcc-c++ pcre-dev pcre-devel zlib-devel make unzip

・Nginxに必要なファイルの取得とインストール

PageSpeedとpsol(Page Speed Optimization Libraries)は、最新版のバージョン番号をGitHubで確認して、下記の赤字の番号と置き換えて作業を進める。

$ cd
$ NPS_VERSION=1.9.32.3
$ wget //github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
$ unzip release-${NPS_VERSION}-beta.zip
$ cd ngx_pagespeed-release-${NPS_VERSION}-beta/
$ wget //dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
$ tar -xzvf ${NPS_VERSION}.tar.gz

CachePurgeはダウンロードページで最新のバージョン番号を確認して、下記の赤字と置き換える。

$ cd
$ NCP_VERSION=2.3
$ wget //labs.frickle.com/files/ngx_cache_purge-${NCP_VERSION}.tar.gz
$ tar -xvzf ngx_cache_purge-${NCP_VERSION}.tar.gz

Nginxも公式サイトダウンロードページで最新バージョンを確認して、下記の赤字と置き換える。

$ cd
$ NGINX_VERSION=1.6.2
$ wget //nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
$ tar -xvzf nginx-${NGINX_VERSION}.tar.gz

ビルドしてインストール。 もしエラーが出たら、手順が合っているなら頑張って自分で調べて解決するしかない。 もっと追求したいなら、configureオプション(./configure –helpで表示される一覧。詳細はwiki参照)を足したり引いたりするといい。

$ cd nginx-${NGINX_VERSION}/
$ ./configure –add-module=$HOME/ngx_pagespeed-release-${NPS_VERSION}-beta –add-module=$HOME/ngx_cache_purge-${NCP_VERSION} –with-ipv6 –with-http_gzip_static_module –with-http_gunzip_module –with-http_spdy_module –with-http_stub_status_module
$ make
$ sudo make install

キャッシュ用ディレクトリを作成し、権限をNginxに変更する。

$ sudo mkdir /var/cache/ngx_pagespeed/
$ sudo chown nginx:nginx /var/cache/ngx_pagespeed/

・Nginxの設定

Googleのサイトの下の方、Using PageSpeed With Virtual Hostsを参考に、まずはNginxの設定ファイルを環境に合わせて変更し、PageSpeedのマルチドメイン用の記述を追記する。

$ sudo vim /usr/local/nginx/conf/nginx.conf

httpセクションの先頭に下記を追加

pagespeed On;
pagespeed FileCachePath “/var/cache/ngx_pagespeed/”;
pagespeed EnableFilters combine_css,combine_javascript;

サーバのCPUが持つコア数の設定。 分からない場合は、下記コマンドを実行した時に表示される左端の数字がそれ。

$ grep processor /proc/cpuinfo |wc

コア数に応じて下記のように変更する。 オレが借りているさくらのVPSは2コアなのでこうなる。

worker_processes 1;
  ↓
worker_processes 2;

その次の行に下記を追記するが、これもコア数によって変化するので、コア数が違う場合はココを参照して変更。

worker_cpu_affinity 01 10;

このままだと起動設定とか面倒なので、パッケージでインストールしたときと同じように操作できるように、起動スクリプトを作成する。

$ sudo vim /etc/init.d/nginx

このファイルに、Red Hat Nginx Init Scriptで公開されている起動スクリプトをコピペして、自分のサイトに合わせて修正する。

Nginxの本体へのパス。

nginx=”/usr/sbin/nginx
  ↓
nginx=”/usr/local/nginx/sbin/nginx

Nginxの設定ファイルへのパス。

NGINX_CONF_FILE=”/etc/nginx/nginx.conf
  ↓
NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf

最後に、起動スクリプトに実行権を与えて、自動起動の設定と確認したらNginxの起動だ!

$ sudo chmod +x /etc/init.d/nginx
$ sudo chkconfig nginx on
$ sudo chkconfig –list nginx
$ sudo /etc/init.d/nginx start

ここまでで、下記の画面が表示されればOK。

Welcome to nginx!画面

■マルチドメインとWordPressのカスタムパーマリンク設定

特に参考にしたのは、秩序と情報とブロッコリーさん。 深謝!

マルチドメイン用設定ファイルの設置ディレクトリを作成する。 sites-availableにマルチドメインにしたいサイトの設定ファイルを全て設置しておき、sites-enableに実際に有効にしたいサイトのシンボリックリンクを張ることで、メンテナンス性を高めている。

$ sudo mkdir /usr/local/nginx/conf/sites-available
$ sudo mkdir /usr/local/nginx/conf/sites-enable
$ sudo chown -R nginx.nginx /usr/local/nginx/conf/sites-*

マルチドメイン用のWebサイトを格納するディレクトリの作成。

$ sudo mkdir /var/www/nky/
$ sudo chown -R nginx.nginx /var/www/nky/

Nginxの設定ファイルに、マルチドメイン用の設定ファイルを読み込むように追記する。

$ sudo vim /usr/local/nginx/conf/nginx.conf

最後のincludeの後に下記を追加

include /usr/local/nginx/conf/sites-enable/*.conf;

次にマルチドメイン用の設定ファイルを作成する。 ファイル名の赤字の所は何て書いても良いけど、サイト名と関連させておくと分かりやすい。

sudo vim /usr/local/nginx/conf/sites-available/nky.conf

まず、赤字は自分のサーバ環境に合わせて書き換えるが、default_serverを設定しておくと、存在しないサブドメイン名とかでのアクセスも、全てこのサイトが表示されるようになるので、必要に応じて消すなりなんなりと。 このWebサイトのドメイン名をserver_nameに、アクセスログの保存場所とファイル名をaccess_logに、Webサイトのファイルを保管している場所をrootに設定する。

記事をカスタムパーマリンクで表示するので、そのための設定は青字のところ。 このカスタムパーマリンクの設定を書いておかないと、トップページは表示されていても、各記事は404エラーになってしまうので焦る。 WP-SUPER-CACHEを使っている人は、ココから丸パクリにするといい。

また、client_max_body_sizeも設定しておかないと、デフォルトの1MBまでのデータしかアップできなくなるのでハマる。

# For nakayan.jp
server {
??? listen 80? default_server;
??? server_name nakayan.jp;
??? access_log? /var/log/nginx/access.nky.log;
??? root?? /var/www/nky;
??? index? index.php index.html index.htm;

??? gzip_static on;
??? client_max_body_size 12m;

??? location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
??????? add_header "" "";
??? }
??? location ~ "^/pagespeed_static/" { }
??? location ~ "^/ngx_pagespeed_beacon$" { }

??? #カスタムパーマリンクの設定
??? if (!-e $request_filename) {
??????? rewrite ^.+?($/-.*) $1 last;
??????? rewrite ^.+?(/.*\.php)$ $1 last;
??????? rewrite ^ /index.php last;
??? }

??? location = /favicon.ico { access_log off; log_not_found off; }
??? location = /robots.txt { access_log off; log_not_found off; }
??? location ~* \.(css)$ {expires 1d;}
??? location ~* \.(txt|html?|js)$ {expires 5d;}
??? location ~* \.(png|jpe?g|gif|ico)$ {expires 30d;}

??? location ~ \.php$ {
??????? root?????????? html;
??????? fastcgi_pass?? 127.0.0.1:9000;
??????? fastcgi_index? index.php;
??????? fastcgi_read_timeout 300;
??????? fastcgi_param? SCRIPT_FILENAME? /var/www/nakayan.jp$fastcgi_script_name;
??????? include??????? fastcgi_params;
??? }
}

上書き保存して終了。 作った設定ファイルに対して、シンボリックリンクを張る。

$ sudo ln -s /usr/local/nginx/conf/sites-available/nky.conf /usr/local/nginx/conf/sites-enable/

設定ファイルの正常性チェックと自動起動の設定。

$ sudo /etc/init.d/nginx configtest $ sudo /etc/init.d/nginx restart

PageSpeedがちゃんと動作しているか、下記のコマンドで最終チェック。

$ curl -I //nakayan.jp

動作していると、下記のようにX-Page-Speedというヘッダがついている。

HTTP/x.x xxxx OK
Server: nginx/xx.xx.xx
Content-Type: text/html;
charset=UTF-8
Date: Fri, 29 Jun 2014 12:12:12 GMT
X-Page-Speed: x.x.xxx.xxxx

これで動作はOK!!

■NginxのログをLogwatchの対象にする設定

ユーザー定義用の設定ファイルを作成する。

$ sudo vim /etc/logwatch/conf/logfiles/http.conf

下記を書いて、上書き保存して終了。

LogFile = nginx/*access.*.log
Archive = nginx/*access.*.log.*.gz
*ExpandRepeats
*ApplyhttpDate

どんな出力がされるかは、下記のコマンドで確認できる。

$ sudo logwatch –print

以上! 次はPHP関連の設定と、WordPressのインストールだよ!

『Nginxの導入と設定(マルチドメイン&カスタムパーマリンク)』へのコメント

  1. 名前:MySQL、PHP、PhpMyAdminの導入と設定 | ナカヤン.JP 投稿日:2014/12/29(Mon) 22:23:21 ID:8a3eed573 Reply

    […] Nginxの導入と設定(マルチドメイン&カスタムパーマリンク) […]

  2. 名前:ナカヤン.JP » Blog Archive » さくらのVPSでSFTPする 投稿日:2014/12/28(Sun) 14:04:17 ID:1b9b79b08 Reply

    […] Nginxの導入と設定(マルチドメイン&カスタムパーマリンク) […]

  3. […] Nginxの導入と設定(マルチドメイン&カスタムパーマリンク) […]