一つのサーバしか持っていないけど、複数のドメインで異なるWebを表示させたいので、Nginxをマルチドメインの設定で導入する。
また、WordPressのカスタムパーマリンクが動作せずに、記事のページが404エラーになったり、データのアップロードが1MBまでしかできなくて焦ったので、その解決方法も。
おまけとして、ページ読み込み速度の改善を目的にGoogle提供のPageSpeedモジュールを、使うかわからないけどリバースプロキシのキャッシュ削除でCachePurgeモジュールを、それぞれ組み込んでビルドしちゃうぞ。
- PageSpeed、CachePurgeを組み込んだNginxの導入
- マルチドメインとWordPressのカスタムパーマリンク設定
- NginxのログをLogwatchの対象にする設定
さくらのVPS設定シリーズ、下記も良かったらどうぞ。
- VPSでOSを再インストールしたので丁寧にメモ
- さくらのVPSでSFTPする
- Nginxの導入と設定(マルチドメイン&カスタムパーマリンク) ←この記事
- MySQL、PHP、PhpMyAdminの導入と設定
- 劇遅サーバの設定を見直したら劇的に改善した
- 【追記】さくらのVPS+WordPress+PHP+Nginxのまとめ
- 【追記】さくらのVPS+WordPress+PHP+Nginxのまとめ2(実設定)
追記で設定を大きく見直したので、参考にするならそちらが適切かと。
特に参考にしたのは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。
■マルチドメインと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のインストールだよ!
コメント