ContaoとNginx

2014年11月11日 15:09 Leo Feyer

NginxでContaoを動作させるのは今でもまだ、ちょっとした挑戦です。この記事は問題の説明と解決の試みを示します。

なぜNginxを使うか?

NgnixはWIkipedia(ドイツ語版)によると上位10,000サイトの22.4%で使用されている、モジュラー構造で高性能なウェブサーバーです。性能に一貫して焦点を合わせ、NginxはApacheウェブサーバーよりも多くのことを高速に行えます。ウェブでは、ページの配信の速度は検索エンジンの順位に好影響を与え、これはNginxに人気が出ている理由でもあります。

本当の問題はどこにあるのか?

NginxとApacheには(とりわけ)1つ重要な点で異なります: Apacheの構成は任意の下位のフォルダーで.htaccessファイルによってカスタマイズできます。そのような機能はNginxにはありません − それは正当な理由によりよるもので、.htaccessファイルの使用が有効だと、Apacheサーバーは現在のフォルダーとすべての親のフォルダーを調べて見つかった設定を統合しなければなりません。これは明らかに性能を妨げる足枷となります。

このため、この機能をNginxは意図的に削除しています。

ContaotとApache

2004年にConaoを開発していたとき、Nginxの開発は初期段階でした。事実上Apacheの代わるものはなく、Apache特有の機能(すなわち先に書いた.htaccessファイル)を使用して、HTTPによるアクセスからフォルダーの保護することに何の問題もありませんでした。申し訳ないことに、Apacheへの依存を多くの箇所で行っていて、例えばNginxへの移行に影響を与えています。

単純な解決策

もっとも単純な問題の解決策はアプリケーションの下位のフィルダーをドキュメントルートに設定して、そこをHTTPでアクセスできる場所とすることです。公開した状態でアクセス可能なすべてのリソースは、その下位フォルダーに複製するか、シンボリックリンクによってアクセスできるようにしなければなりません。ドキュメントルートとその下位のフォルダー以外は、自動的にHTTPによるアクセスから保護されます。

Contao 4では、その方法を採っています。すべての公開するファイルは下位フォルダーwebから提供され、もう.htaccessファイルは使用しません。この方法で、Contaoはウェブサーバーに依存しなくなり、ApacheのようにNginxでも容易にインストールできます。しかしながら、その引き換えにホスティングサービスに対して、サーバーがシンボリックリンクのサポートを提供しなければなりません。

Contao 3での解決

Contao 3では単純な解決策はありません。もちろん、ContaoをNginxで動作させることは可能ですが、.htaccessのファイルがあるすべてのディレクトリを静的なNginxの設定で保護しなければなりません。しかし、この方法ではContaoのファイル管理でクリックで保護をすることはできなくなります。その上、機能拡張リポジトリからインストールする際に、.htaccessファイルを置く必要があるかどうかを別に調べなければなりません。その後で、Nginxの設定に手作業で反映しなければなりません。

混在した解決策

混在した解決策はNginxとApacheの両方をウェブサーバーとしてインストールします。Nginxサーバーはすべてのリクエストを処理しますが、その一部にだけ自身で応答し、残りはローカルのApacheウェブサーバーに渡します。ローカルのApacheサーバーは、それでも.htaccessファイルを評価しますが、ずっと少ないリクエストの受け取りとなるので必要とするリソースも少なくなります。

似たような混在した解決策はContaoウェブホスティングでも使用しています。顧客は例えばContao 2かContao 3といった、Nginxの異なるプロファイルを選択します。そのプロファイルによってNginxはどの問い合わせが直接応答でき、何をApacheに転送するかを決定し、その結果既存のすべての.htaccessファイルは評価されます。

Contao 3の場合、例えばassets/といったフォルダー以下のファイルはNginxが直接提供し、一方でfiles/といったフォルダー以下のファイルはApacheに向けられます。このようにして、ウェブサイトは少なくとも部分的にはNginxウェブサーバーのより良い性能を生かし、コンテンツの提供の速度に目に見える恩恵を受けられます。

もし、混在した解決策を試したい場合はinetrobots.deに登録してみてください、30日の返金保証があります。ついでですが、既にContao 4向けの登録も受け付けていて、Apacheなしで済ませられます。 :)

結論

NginxとContao 3は常に妥協が必要です。動的なアクセス制御が必要なければ、すべての.htaccessの設定をNginxの設定に手作業で反映することで、既にNginxでContaoを提供できます。Nginxの設定を扱いたくない場合は、Contaoウェブホスティングで使用しているような混在した解決策を採れます。しかし、すべての問い合わせを直接Nginxサーバーから返せないという制限があります。

他のすべての場合は、おそらく最初はApacheに留まってください。しかし、Contao 4がリリースとなる2015年5月は、それほど先のことでもありません。


公式サイトのドイツ語版の記事: Contao und Nginxの翻訳で、Google翻訳で英語を経由した翻訳です。

戻る