2016/01/26

NginxとWordPressでSSIを動かす設定にハマった話

いまどきダサい設計なのは承知の上で


仕事で久しぶりにWebエンジニアっぽいことをしてハマったのでメモ残しておく。

※一部の設定は敢えて隠してありますのでご注意ください。


やりたいこと

 
  • とあるSSIを含むサイトをAWS基盤に移行し、同時にWordPressベースにする
  • AWS公式チュートリアルドキュメントにある基盤構成(AWS EC2 + Nginx + PHP + MySQL + WordPress)にする
  • SSIはとりあえず維持(将来的にはWordPressによる対応に移行予定)

どういうわけかSSIがまったく動かない!


Nginx公式サイトのドキュメントに従って、 /etc/nginx/nginx.conf の location セクションに以下のような設定を投入。

location / {
    ssi on;
    ssi_last_modified on;
}
 ...
もちろん、設定投入後に nginx の再起動を実施。

$ sudo service nginx restart


しかし、どういうわけかHTML内のSSIコマンドがまったく解釈されず、そのままHTMLコメントとしてブラウザに届いてしまう始末…。

ブラウザに届いたHTMLソース。SSIコマンドがそのままコメントとして届いておる…。


なぜじゃー!!

疑ったことは

  • 設定ファイルをちゃんと読んでない? -> SSIの設定文法を敢えて間違えてみるとちゃんとエラーになるので設定は読んでいる
  • 実はNginxじゃなくてApacheが動いていて、設定する場所が違う? --> chkconfig --list コマンドで見るとちゃんとApacheは停止、Nginxが稼動している

ということで「そもそもなミス」ではない模様。

こちらの記事(注:英語)を参考にエラーログレベルをdebugにしてもNginxのログにSSI関連のものが一切出力されていないため、そもそもSSIが有効になっていないことは間違いない。


トラブルシュート:ここからはもうカンのレベル

ここからのトラブルシュートは、もう経験とカンとしか説明のしようがないですな。



なにげなく Nginx の設定フォルダを眺めていると、 conf.d というディレクトリが。
nginx.conf があるのにさらに別に conf.d が?(よく設定ファイルを格納するディレクトリに使われる名前)

中を覗いてみると


む、なにやら怪しいファイルたちが。
普通の環境ではNginxでのSSIは当たり前のように動くようなので、私の環境で普通じゃないところといえばWordPressが入っていること。
試しに wordpres.confを開いてみると…

※一部の設定は敢えて隠してありますのでご注意ください


むむむ。怪しい。
コメントアウトされていない(つまり有効な)設定が入っていて、 location / などと書いてある。
もしやここにSSIの設定を投入しなければならないのでは?

と、いうことで、やってみた。

※一部の設定は敢えて隠してありますのでご注意ください
これで、動いたー!


まとめ

 
  • SSIの設定を /etc/nginx/nginx.conf に入れていたが、そもそもSSIが解釈されなかった
  • いろいろ見ていると /etc/nginx/conf.d/wordpres.conf という怪しげな設定ファイルがあり、そこにも似たような設定が書かれていた
  • wordpres.conf にSSIの設定を投入したところ動いた
と、いうお話でした。

自覚はしてますよ、WordPressサイトでSSI動かすなんてナンセンス、ということは…。