最近、フロントエンドロードバランサーとしてhaproxyを使用して、すべてのDocker環境にWebサイトを移行しました。 Let's Encryptによって発行されたすべてのドメインのSSL証明書があり、すべてがうまく機能します。 CloudFlareを有効にすると、すべてが無限リダイレクトループで中断します。
CloudFlareで完全または厳密なSSLを使用すると問題は解決するが、CSS、JS、および画像の読み込みに失敗すると言う記事をいくつか読んだことがあります。
CloudFlareを無効のままにして、提供されたDNSのみを使用することが、すべてが機能する唯一のオプションです。これは理想的ではありません。Cloudflareを使用したかったのは、Cloudflareが理由だったからです。
現在、サーバーには2つのサイトがホストされています。基本的な伝記ページと、地元の教会の募金活動のために取り組んでいるサイトです。
募金サイトに対して何をしたのかはわかりませんが、Cloudflareをすべて無効にした後でも、まったく機能しません。今は無限ループに陥っています。幸いなことに、基本的にその上で開始したばかりで、必要に応じて再起動できます。 馬鹿げているのは、この投稿を書くのに時間がかかったときに、募金サイトが修正されたことです。 たぶん様々なキャッシュが原因でしょうか?
bkvaluemeal.net 私の基本的な伝記ページは、NGINXコンテナで作成してホストしたカスタムPHPです。
theresianbazaar.tk 教会の募金活動はプレーンでシンプルなWord Pressコンテナーです
それらはすべてhaproxyコンテナーでリンクされています
global
daemon
maxconn 100
pidfile /var/run/haproxy.pid
stats socket /var/run/haproxy.stat mode 600
tune.ssl.default-dh-param 4096
defaults
mode http
maxconn 50
timeout client 60s
timeout server 60s
timeout queue 60s
timeout connect 4s
timeout http-request 5s
option httpclose
option abortonclose
option http-server-close
balance roundrobin
option forwardfor
retries 2
frontend http
bind *:80
reqadd X-Forwarded-Proto:\ http
redirect scheme https code 301 if !{ ssl_fc }
acl Host_haproxy hdr_beg(Host) -i haproxy.
acl Host_bkvaluemeal hdr(Host) -i www.bkvaluemeal.net
acl Host_bkvaluemeal hdr(Host) -i bkvaluemeal.net
acl Host_theresianbazaar hdr(Host) -i www.theresianbazaar.tk
acl Host_theresianbazaar hdr(Host) -i theresianbazaar.tk
acl letsencrypt path_beg -i /.well-known/acme-challenge/
use_backend haproxy if Host_haproxy
use_backend bkvaluemeal if Host_bkvaluemeal
use_backend bkvaluemeal if Host_bkvaluemeal letsencrypt
use_backend bkvaluemeal if Host_haproxy Host_bkvaluemeal letsencrypt
use_backend theresianbazaar if Host_theresianbazaar
use_backend theresianbazaar if Host_theresianbazaar letsencrypt
default_backend haproxy
frontend https
bind *:443 ssl crt /ssl
reqadd X-Forwarded-Proto:\ https
acl Host_haproxy hdr_beg(Host) -i haproxy.
acl Host_bkvaluemeal hdr(Host) -i www.bkvaluemeal.net
acl Host_bkvaluemeal hdr(Host) -i bkvaluemeal.net
acl Host_theresianbazaar hdr(Host) -i www.theresianbazaar.tk
acl Host_theresianbazaar hdr(Host) -i theresianbazaar.tk
acl letsencrypt path_beg -i /.well-known/acme-challenge/
use_backend haproxy if Host_haproxy
use_backend bkvaluemeal if Host_bkvaluemeal
use_backend bkvaluemeal if Host_bkvaluemeal letsencrypt
use_backend bkvaluemeal if Host_haproxy Host_bkvaluemeal letsencrypt
use_backend theresianbazaar if Host_theresianbazaar
use_backend theresianbazaar if Host_theresianbazaar letsencrypt
default_backend haproxy
backend bkvaluemeal
server bkvaluemeal bkvaluemeal:80 check
backend theresianbazaar
server theresianbazaar theresianbazaar:80 check
backend haproxy
stats enable
stats hide-version
stats uri /
server {
server_name bkvaluemeal.net www.bkvaluemeal.net;
root /www;
index index.php;
location / {
try_files $uri $uri/ = 404;
}
location ~ /(includes|lib|res|.htpasswd) {
deny all;
return 404;
}
location ^~ /admin/ {
try_files $uri $uri/ = 404;
auth_basic 'Restricted Content';
auth_basic_user_file /www/.htpasswd;
}
location ~ \.php$ {
try_files $uri = 404;
fastcgi_pass php:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/bkvaluemeal/$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root/bkvaluemeal;
}
}
私は自分の設定に関する重要な情報を、ハッキングされるまで公開しないことを望んでいます...
現在、CloudFlareは両方のサイトで無効になっており、DNSとしてのみ機能しています。無限のリダイレクトループを発生させることなく、両方のサイトでCloudFlareを完全に使用できるようにしたいと思います。
@ Jules で示唆されているように、haproxyのリダイレクトを削除し、両方のサイトでCloudFlareのフル(厳格)SSLを有効にしました。私の個人用サイトは問題なく動作しますが、プロモーションサイトは無限ループに陥っています。 haproxyの統計ページ は、変更を行ってからリクエストがゼロと表示されていますが、最近では2つまで表示されています。
Word Pressのログインページを試すことにしました。接続に失敗しましたが、Docker Composeスタックは21のリクエストを記録しました。最初のURLは301で、残りの20は302でした。そのURLへの今後のリクエストはすべて、21の302レスポンスになります。
カールを使用して、ここで起こっている狂気を描き出しました。簡潔にするためにPastebinに投稿しました。 httpshttp
現在、CloudFlareはプロモーションサイトで無効になっています。サイトは私のサーバーから直接提供されています。
Wordpressは、これらのリダイレクトループの典型的な原因です。 httpsサイトとして設定されていることを確認してください。そうでない場合、wpはhttpにリダイレクトし、cloudflareはhttpsに無限にリダイレクトします。