2018-05-25

tobijibu

にほんご。にnginxを導入

以前からやろうとしていたのですが、 稼働中のサイトで安定していますし、色々と考えなければいけないことが多く、億劫で先延ばしにしていました。

ただ、GoogleAnalyticsのページ速度もちょこちょこと時間が増えてきているので、なんとかしたいと思っていました。 にほんご。は全て静的コンテンツですので、Apacheよりもnginxの方がパフォーマンスは良いことが期待できます。

そうした背景もありつつ、そして今日、重い腰を上げてApacheからnginxに移行しました。

インストールはyumを使うだけですし、設定も簡単です。 導入手順はそこら中にありますので、ここでは紹介しません。

ただ、設定で1つハマった点があったのでまとめておきます。


にほんご。では、あらかじめgzipで圧縮したファイルを使っています。 そのため、*.gzファイルがあれば、基本的にそのファイルを読み込むようにします。

server {
    ...
    gzip_static always;
    ...
}

ここで落とし穴がありました。 ほとんどのページは正しく表示することができたのですが、 http://tr.you84815.spaceというように、 ファイル名まで指定しないページ(index.html)が403エラーになってしまいました。

色々と調べたところ、以下の記述を見つけました。

The problem is that requests to / are first handled by the ​index module, and 403 is be returned as there are no index file. The gzip_static module only works when returning a particular file, and no file is returned in this case. See ​How nginx processes a request for an introduction on request processing in nginx.

For the gzip_static module to work you have to somehow instruct nginx that a request to / should return /index.html. Normally this is done by index module due to an index file, and most trivial solution would be to create an empty index.html as you did in your tests. Alternatively, you can configure ​rewrite to change requests from / to /index.html.

引用 - trac.nginx.org(https://trac.nginx.org/nginx/ticket/1367)

どうも、gzip_staticindex.html.gzを使うにはindex.htmlが無いと動かないようです。 にほんご。では全て*.gzで圧縮していたため、index.htmlがありませんでした。

そこで上記の内容に従って、空のindex.htmlを用意して対応すると、正しく表示されました。ちゃんとindex.html.gzを読み込んでいるようです。

普段nginxを使う場合には、大抵index.htmlがあったり、index.phpというような動的ファイルだったりするので、あまり意識したことがありませんでした。 index.html.gzは当然読み込んでくれると考えていたのですが、思い込みは良くないですね。

これでページ速度も上がると良いのですが、しばらく観察していきたいと思います。