web-dev-qa-db-ja.com

Cloudflare無限リダイレクト

バックグラウンド

最近、フロントエンドロードバランサーとして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コンテナーでリンクされています

構成

haproxy.cfg

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 /

bkvaluemeal.net NGINX default.conf

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はプロモーションサイトで無効になっています。サイトは私のサーバーから直接提供されています。

3
bkvaluemeal

Wordpressは、これらのリダイレクトループの典型的な原因です。 httpsサイトとして設定されていることを確認してください。そうでない場合、wpはhttpにリダイレクトし、cloudflareはhttpsに無限にリダイレクトします。

1
Jules