web-dev-qa-db-ja.com

SSLを使用したキャッシュサーバーの背後にあるJoomla

キャッシュシステムをJoomla3.xで動作させるのに問題があります。サーバーはHTTPS/TLS接続を強制する必要があるため、これは特に問題です。

JoomlaシステムはDebianWheezy上のApache2で実行されます。

Varnishをセットアップしようとしましたが、VarnishがTLSトラフィックを終了できないことに気付いたので、ApacheまたはHAProxyにルーティングする必要があります。しかし、そうすると、Joomlaは、リクエストがそれらすべてのレイヤーを通過する間に書き換えられるリクエストヘッダーと混同され、Joomlaはリダイレクトループでスタックして終了するか、サーバーエラーで応答します。

別のサーバーでSSL終了が発生することに起因するリダイレクトの問題なしに、Joomlaの前にロードバランサーでさえキャッシュを配置するクリーンな方法はありますか?

2
Izzy

あなたが言ったように。 VarnishはSSLを処理しませんが、Varnishに渡すSSL終了プロキシを使用することは可能です。 SSLターミネーションプロキシはヘッダーを追加または削除したり、ポートを変更したりできるため、リダイレクトループを回避するフローを作成できるはずです。

一般的なSSLターミネーションプロキシは、Pound、Stunel、Nginx、HAProxyです。必要な機能の範囲によって、使用する機能が決まります。 NginxとHAProxyの最近のバージョンでは、SPDYを使用できます。簡単に検索すると、現在、他のバランサーよりもNginxとVarnishを使用するための最新のガイドがたくさんあると思います。

SSLターミネーションプロキシとしてのNginxの場合、一般的に次のことが推奨されます。

server {
        listen 443 ssl;

        server_name example.com;
        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        location / {
            proxy_pass http://127.0.0.1:80;
            proxy_set_header X-Real-IP  $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto https;
            proxy_set_header X-Forwarded-Port 443;
            proxy_set_header Host $Host;
        }
}

これは、ポート443からSSLを取得し、復号化してローカルホストポート80に渡します。これがSSLトラフィックであることを示すX-Forwarded-Proto httpsヘッダーを追加しています。構成は、ログなどの読み取りに役立つ他のヘッダーも追加します。

Varnishがlocalhost:80でリッスンしていると、通常のトラフィックと同じようにリクエストを処理し、ApacheとJoomlaに渡します。

Apacheでは、SetEnvIfNoCase X-Forwarded-Proto https HTTPS=onが必要になります。

これらすべてが一緒になって、Joomlaが何が起こっているのかを理解し、適切に動作することを意味するはずです。

3
Taylor Taff