nginxの設定ファイルを書きなおした

カテゴリ:Web制作タグ:,,

VPSの構築の際に書いたnginxのconfファイルですが、どうもマルチサイトだとアーカイブなどが正しく動いていないみたい。設定ファイル自体もその前に構築した際に検索しまくってつぎはぎで作ったものだったので、これを機にいろいろ修正しました。
前回の記事を参考にしていただいた方は申し訳ありません。

※VPSの記事から来ていただいた方もこちらの手順と合わせて進めてもらえるよう、nginxの設定部分について全て書いてあります。

この記事の内容

  1. nginx.confファイルを編集する
  2. 共通confファイルを作成する
  3. サイト毎のconfファイルを作成する(リバースプロキシ部分)
  4. サイト毎のconfファイルを作成する(バックエンド部分)
  5. Nginx Cache Controller でモバイル用のキャッシュも削除する
  6. 終わりに


編集対象のファイルのコマンドが抜けていたので追記しました。ご迷惑をおかけいたしました。

を実行して、設定ファイルを開きます。

まず

の1を3に変更します。
※CPUのコア数によって読み替えて下さい。さくらVPS 2Gは仮想3コアなので3を設定しました。

次にそのすぐ次の行に

を追加します。
こちらもコア数によって書き方が異なるので注意
※詳しくはNginxのworker_processesとworker_cpu_affinity | 設定やツールねたが参考になります。
※2014/5/16追記:以前のリンク先がリンク切れになっていたので別のサイトで説明されているものへ変更しました。

次に

の次の行に

を追加します。

次に

の65を5へ変更します。

最後に

より上の行に
nginx.conf.txtの内容を全てコピーして貼り付けます。

ここまで編集が終わったら、

で上書き保存をします。

各サイト用設定ファイルからインクルードする共通設定ファイルを作成していきます。
まず

を実行して共通設定格納用ディレクトリを作成します。

まず、favicon、robots.txtなどのファイルの場合、アクセスログ、Not Foundログを無効にするためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、drop.conf.txt内容を全てコピーして貼り付けます。
2013/09/15:一部修正しました。

貼り付けが終わったら、

で上書き保存をします。

次に、expiresヘッダーを設定するためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、expires.conf.txt内容を全てコピーして貼り付けます。
2013/09/15:一部修正しました。

貼り付けが終わったら、

で上書き保存をします。

次に、携帯・スマホ用キャッシュを設定するためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、mobile-cache.conf.txt内容を全てコピーして貼り付けます。

貼り付けが終わったら、

で上書き保存をします。

2013/1/20:phpMyAdmin用設定ファイルに不備があったので、修正いたしました。
修正前に閲覧していただいた方にはご迷惑をおかけしました。

次に、phpMyAdmin用の設定をするためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、phpmyadmin.conf.txt内容を全てコピーして貼り付けます。

貼り付けが終わったら、

で上書き保存をします。

次に、postfixadmin用の設定をするためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、postfixadmin.conf.txt内容を全てコピーして貼り付けます。

貼り付けが終わったら、

で上書き保存をします。

次に、マルチサイト用の設定をするためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、wp-multi.conf.txt内容を全てコピーして貼り付けます。

貼り付けが終わったら、

で上書き保存をします。

最後に、シングルサイト用の設定をするためのファイルを作成します。

を実行してファイルを新規作成して下さい。

次に、wp-single.conf.txt内容を全てコピーして貼り付けます。

貼り付けが終わったら、

で上書き保存をします。

※様々なファイルをインクルードで読み込むため別途前項の共通設定ファイル作成で、各種設定ファイルを作成している必要があります。

まず、リバースプロキシ用のファイルを作成します。

を実行してファイルを新規作成して下さい。(※ファイル名は好きなようにつけて下さい)

次に、シングルサイトとマルチサイト(サブディレクトリ型でインストールした方)はdefault-proxy.conf.txt
マルチサイト(サブドメイン型)でインストールした方はdefault-multi-subdomain-proxy.conf.txt
内容を全てコピーして貼り付けます。
※サブドメイン用の設定ファイルについては、当方で確認出来る環境がないため未確認です。変わっている箇所は

の箇所だけなので問題ないとは思いますが、念のため予めご了承下さい。

貼り付けが終わったら、ファイルを編集していきます。

まず、

となっているところを、シングルサイト及びマルチサイト(サブディレクトリ型でインストールした方)は使用しているドメインに書き換えて下さい。
※例:example.com、example.com/wordpress、wp.example.comなど
マルチサイト(サブドメイン型でインストールした方)は、ドメイン名+半角スペース+*.ドメイン名に書き換えて下さい。
※例:example.com *exaple.com

次に

となっているところをそのサイトのドキュメントルートを指定して下さい。
デフォルトのままだと、
/var/www/html/server_name($hostはserver_nameに置き換わるため)が指定されます。

次に、携帯やスマートフォンで別々にキャッシュしたい場合は

の先頭の#を削除してコメントアウトを解除します。
※別途前項の共通設定ファイル作成で、mobile-cache.confを作成している必要があります。

次に、今設定中のドメインでphpMyAdminにアクセスしたい場合は、

の先頭の#を削除してコメントアウトを解除します。
※phpMyAdminをインストールしている必要があります。
※別途前項の共通設定ファイル作成で、phpmyadmin.confを作成している必要があります。
この項目を有効にすると、
http://ドメイン名/phpmyadmin
にアクセスすることでphpMyAdminが利用出来ます。(アクセスする際のURLなどを変えたい場合は、phpmyadmin.confをいじって下さい。)

次に、今設定中のドメインでpostfixadminにアクセスしたい場合は、

の先頭の#を削除してコメントアウトを解除します。
※postfixadminをダウンロード・展開している必要があります。
※別途前項の共通設定ファイル作成で、postfixadmin.confを作成している必要があります。
この項目を有効にすると、
http://ドメイン名/postfixadmin
にアクセスすることでpostfixadminが利用出来ます。(アクセスする際のURLなどを変えたい場合は、postfixadmin.confをいじって下さい。)

ここまで編集が終わったら

を実行して上書き保存します。

※様々なファイルをインクルードで読み込むため別途前項の共通設定ファイル作成で、各種設定ファイルを作成している必要があります。

次にバックエンド用の設定ファイルを作成します。

を実行してファイルを新規作成して下さい。(※ファイル名は好きなようにつけて下さい)

次に、シングルサイトとマルチサイト(サブディレクトリ型でインストールした方)はdefault-backend.conf.txt
マルチサイト(サブドメイン型)でインストールした方はdefault-multi-subdomain-backend.conf.conf.txt
内容を全てコピーして貼り付けます。
※サブドメイン用の設定ファイルについては、当方で確認出来る環境がないため未確認です。変わっている箇所は

の箇所だけなので問題ないとは思いますが、念のため予めご了承下さい。

貼り付けが終わったら、ファイルを編集していきます。

まず、

となっているところを、シングルサイト及びマルチサイト(サブディレクトリ型でインストールした方)は使用しているドメインに書き換えて下さい。
※例:example.com、example.com/wordpress、wp.example.comなど
マルチサイト(サブドメイン型でインストールした方)は、ドメイン名+半角スペース+*.ドメイン名に書き換えて下さい。
※例:example.com *exaple.com

次に

となっているところをそのサイトのドキュメントルートを指定して下さい。
デフォルトのままだと、
/var/www/html/server_name($hostはserver_nameに置き換わるため)が指定されます。

次に、マルチサイト(サブディレクトリ型でインストールした方)のみ、

の先頭に#を付けてコメントアウトして下さい。
その後

の先頭にある#を削除してコメントアウトを解除して下さい。

ここまで編集が終わったら

を実行して上書き保存します。

次に、Proxy Cache用のディレクトリを作成します。

念のため

を実行して、所有者をnginxへ変えておきましょう。
※キャッシュの書き込みエラーなど起こらないように。
2013/1/16追記:デフォルトではディレクトリがないため作成しないとエラーになるようです。
作業中に作成していたため気が付きませんでした。コメントでご指摘いただいたTony Dionさん感謝いたします。

最後に

を実行してnginxを再起動して下さい。

テーマのfunctions.phpに

を追加します。

WordPressでnginxのキャッシュを削除するのには、Nginx Cache Controllerを入れましょう。
2013/01/31追記:当サイトの設定通りに設定した方は、Nginx Cacheを開いて、キャッシュディレクトリを/var/cache/nginx/proxy_cacheへする必要があります。
変更するのが面倒くさい場合は、nginx.confファイルを編集するの項において、プロキシキャッシュの設定部分のproxy_cache_pathを/var/cache/nginxへ変更すればデフォルトのままでも動きます。

また、Nginx Cache Controllerでモバイル用のキャッシュも削除する方法や.confファイル内での共通設定などを読み込むというヒントなどなどは、
網元で Ktai Style とか使う時の注意点を参考にさせていただきました。
その他にもnginxの各種設定やWordPress関連の詳しい説明を記事にしていらっしゃるので是非見てみる事をおすすめします。
むしろ私の記事よりは役に立ちます。

また、をかもとさんはAWSで高速に動かす網元にも携わっているみたいなのでさくっと構築済みの環境が欲しいって方は利用してみるといいのではないでしょうか。
詳しい説明は、WordPress 専用高速 AMI “網元” はじめましたでされています。

あとでよむ / みんなにシェアする

このエントリーをはてなブックマークに追加
LINEで送る

コメントをする / みる

コメントを残す

12件のコメント

Tony Dion より:

こんにちは。最後の
/etc/init.d/nginx restart
の時に、/var/cache/nginx/proxy_cache がないとエラーが出ました。
→mkdirしたらエラー回避。報告まで。

UKLab より:

コメントありがとうございます。
確かにディレクトリがないとエラーになってしまいますね。
作業中にいろいろ変更しながら行なっていたので見落としがあったようです。
ご指摘いただいた箇所に説明を加えさせていただきました。

Exf より:

こちらの記事、とても参考になりました。

こちらと同じ環境にて構築を行ったのですが、+αとして
wp-adminにbasic認証をかけようと思った段階で躓いてしまいました。

example.com-proxy.conf のserverディレクティブ内に location /wp-admin のディレクションではどこか間違っておりますでしょうか?

ご多忙のところと思いますが、教えて頂けませんでしょうか。
宜しくお願いします。

UKLab より:

コメントありがとうございます。
wp-admin以下にbasic認証を行いたいとのことですが、

example.com-proxy.conf内
server{
location /wp-admin/ {
#Basic認証のメッセージ
auth_basic “Please Auth!”;
#Basic認証用.htpasswdファイルの場所
auth_basic_user_file “/var/www/html/example.com/.htpasswd”;
}
}

上記は一例ですが、記述を行なっても動作しないということでしょうか。
※Basic認証自体の記述は二行書けば動くはずです。
locationの記述についても/wp-admin/で動作するかと思います。(こちらは未確認です)
場合によっては、
location ~* ^/wp-(content|admin|includes) {

より上に書かないと動作しないかもしれません。
当方ではwp-adminにはBasic認証をかけた事がないため、また詳しい状況が分かりかねますので、予想してのご回答となりますことご了承下さい。

また、文面からは.htpasswdの作成は出来ているものとは予想しますが、
http://www.luft.co.jp/cgi/htpasswd.php
などのツールを使うと簡単に生成出来るかと思います。

最後に、返信が大変遅くなりました事お詫び申し上げます。
以上になりますが、参考になりましたら幸いです。

fuji より:

大変参考になりました。ありがとうございます。

携帯・スマホ用キャッシュを設定して使用しています。
Nginx Cache Controllerでモバイル用のキャッシュも削除しています。

タブレットPCも別にキャッシュしたくて

if ($http_user_agent ~* ‘(iPad|Android)’) {
set $mobile “@tablet”;
}

としてみたのですが、うまく反映されません。

その他、設定が必要でしょうか?

よろしくお願いします。

UKLab より:

コメントありがとうございます。

nginxの設定ファイルに追記していただいた場合、テーマのfunctions.phpに追記するコードも一部変更する必要があるかと思います。

具体的には、Nginx Cache Controllerでモバイル用のキャッシュも削除するでfunctions.phpに追記するコード内の
$nginxchampuru->get_cache_key($url.’@ktai’),
$nginxchampuru->get_cache_key($url.’@smartphone’),

の後にfuji様でしたら、
$nginxchampuru->get_cache_key($url.’@tablet’),
を追記していただくと動くのではないかと思います。

よろしくお願いいたします。

ikeda より:

大変参考になります。ありがとうございます。

一点躓いてしまったのでご教授いただけないかと思いコメントさせていただきます。

初めから現在サイト毎のconfファイルを作成する(バックエンド部分)までを順にやってきたのですが、nginxの再起動のところで、ポート番号80番が使われているとのことでNGになってしまい起動ができません。
調べてみたところhttpdが使用中(apacheですよね?)とのことだったのですが、
どちらかのポート番号の変更などしたほうがよいのでしょうか?
最初からここまでの中の手順の中で私が見た限り見当たらなかったので
もしよろしければ教えていただけませんか?

よろしくお願いします。

UKLab より:

当方ではhttpd(apache)は使用しない方向で書いておりますので、httpdがすでに起動中だとポート80がすでに専有されており起動しないかと存じます。

特別httpd(apache)を使う予定がないのであれば、
service httpd stop
でhttpdを停止後、
chkconfig httpd off
で自動起動をOFFにすれば、nginxの起動は可能かと思いますがいかがでしょうか?

httpd(apache)と共存させる場合はnginxのポート番号に80番以外を使うことで可能かと思われます。
具体的には
listen 80;
を他のポートへ変更することで可能だと思います。
他のポートへ変更した場合、別途iptables(ファイアーウォール)などを設定している場合は、変更したポート番号で外部から通信できるよう設定してあげる必要も出てくるかと思います。

分かりづらい説明となり大変申し訳ございませんが、お試しいただけましたら幸いです。
よろしくお願い致します。

popolog より:

大変分かりやすく参考にさせていただいております。

ひとつ質問があります。

expires.conf_.txt の構文の breakの位置が上3つと下1つで

変えてあるのは理由があるのでしょうか。

よろしくお願いいたします。

UKLab より:

コメントありがとうございます。
ご質問いただいた点に関しては特に理由はございません。
上部3つと同様の記載に変更しましても動作するかとは思います。
以上よろしくお願い致します。

popolog より:

ご回答ありがとうございます。

モヤモヤが解消されました。
また質問させていただくかもしれませんが、
よろしくお願いいたします。

UKLab より:

私もサーバー構築については調べながら作成したので、分かりづらい点などもあるかとは思いますが、参考にしていただければ幸いです。
よろしくお願い致します!

検索する

カテゴリ一覧

タグ一覧

お知らせ アクセス解析 アプリケーション ゲーム サーバー スニペット プラグイン 動画 日記 Laravelパッケージ Laravel3 Laravel4 Tips Webサービス Webデザイン WordPress

最近投稿された記事

つぶやき

【GIGAZINE読者限定早い者勝ち】無料でDropbox・Googleドライブなどのクラウドを自由自在に同期・一括管理できる「まとめてクラウド」が先着5万人48時間だけゲット可能 - GIGAZINE gigazine.net/news/20151010-…

約2年前

離れていてもコミュニケーションが取りやすい便利なサービス「Remotty」 #remotty remotty.net

約2年前

RT @localdisk: メジャーどころがたくさん / 【セキュリティ ニュース】「WPTouch」など多数のWordPressプラグインに脆弱性(1ページ目 / 全1ページ):Security NEXT security-next.com/057930

約2年前

Javascript フレームワーク「Aurelia」aurelia.io

約2年前

dockerで起動済みのコンテナに対して何かしたい時は、docker exec -it コンテナ名 /bin/bashで入って実行したり、docker exec -it コンテナ名 supervisorctl restart nginxみたいな事も出来て便利。

約2年前

サーバー移転完了に伴いサイトの閲覧も可能な状態になりました。移転作業中にご訪問いただいた方には大変ご迷惑をおかけいたしました。今後このようなことがないよう気をつけて参ります。

約2年前

現在当サイトが閲覧出来ない状態となっております。こちらはサーバーの移転作業に遅れが生じているためとなっております。ご利用いただいている方にはご迷惑をおかけいたします。

約2年前

WordPress4.1.1(日本語版)が利用出来るようになりました wp.me/p4RkJY-Dj

約3年前

RT @keito_jp: Twitterをサマーウォーズ的に表示させるやつを製作中。遊んでみてね。 open.moo.jp http://t.co/gIgp5Gh6qW

約3年前

任天堂、YouTubeの広告収入を動画制作者とシェアする「Creators Program」サービス開始 | Game*Spark - 国内・海外ゲーム情報サイト s.gamespark.jp/article/2015/0…

約3年前

↑上へ戻る