Apacheからnginxへ乗り換えたときのメモ(トラブルシューティングなど)


今日は最近巷で良く聞くnginx(HTTPサーバ、プロキシサーバ)の話です。

最近はnginxを導入して○○倍高速化しました、という記事がいくつか人気になっています。自分はWordpressを使っていて、前からレスポンスの悪さが気がかりでした。そんなわけで波に乗ってnginxを導入することに。今日は導入過程で躓いた点をいくつかまとめておきます。

基本的には以下のようなサイトに従ってインストールすればインストールと起動まではOKでした。

WordPressを100倍速くする! MySQLの調整やnginx proxy cache - KRAY Inc さくらVPSのWordPressをチューニングして30倍高速化した方法 - 原宿・表参道.jp

ここからが問題でした。この記事では自分が詰まったり、アレ?と思った点をまとめていきます。

普通にyum install nginxしてもバージョンが古い(1.0.15)

以下を参考にしました。

CentOS6で最新版のnginxをyumでインストールする - 飲んだり寝たり

お決まりのリポジトリ追加で対応。これをやったあとでyum update nginxで1.4.4になりました。

WordpressのTOP画面へアクセスできても各記事が見れない

もともとApacheを利用しており、静的コンテンツは/var/www/htmlへ、Wordpressは/var/www/tech_blogへ配置していたので、まずはtech_blogをhtml配下へ移動しました。これは別にaliasでも良いと思います。

ここまででtech_blog/へアクセスするとindex.phpが呼び出され、TOP画面が表示されるようになりました。しかし、各記事へアクセスできませんでした・・・。各記事はtech_blog/archive/999というようなパスになっており、そのパスに実体がないからNot Foundという感じです。

色々調べたりして、最終的に以下の記事が最も有益でした。

nginx+php-fpmをyumでインストールして、WordPress/CakePHPを動かす設定 - Shin x blog

上記の2.3以降のrewriteが足りなかったせいでNot Foundだった、というわけですね。参考になりました。

なぜかTOPページ”だけ” 403 Forbiddenになる。

“nginx 403”などでぐぐっても出てくるのは大抵ファイルのアクセス権だったり所有権だったりで、全く合致せず・・・。ちゃんとhtmlフォルダはnginx所有だし、workerプロセスの実行ユーザはnginxだし、index.htmlもnginx。何も問題ないのに・・・と思って悩みました。

設定ファイルを眺めていると・・・そういやdeny設定したなあ、と。

    location ~ (\.ht|\.git|\.svn) {
        #deny  all;
    }

~\.htが.htmlにもマッチするせいで、トップページであるindex.htmlがdenyになってしまったというオチです。

以下のサイトの人も同じ記事を書いています。

nginxメモ - mn-memo

サンプルのconfにちゃんと書いてありますね。もう少し注意深く見るべきでした。.htaccessは必ず.で始まるので/.とすることでマッチさせる・・・と。

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}