kusanagi restart 後にHTTPSリダイレクトループが発生する

TOP Forums バグ報告と提案(Requests and Feedback) kusanagi restart 後にHTTPSリダイレクトループが発生する

kusanagi restart 後にHTTPSリダイレクトループが発生する

Viewing 6 reply threads
  • Author
    Posts
    • #1697
      hirasawa3
      Participant

        AlmaLinux 9 / KUSANAGI 9.11.2 / httpd-behind-nginx 構成です。

        9.9.0から9.11.2へdnf upgrade後、kusanagi restart が実行されると、
        全profileでHTTPSの301リダイレクトループが発生しました。

        調査したところ、kusanagi restart 時に
        /etc/opt/kusanagi/httpd/conf.with_nginx.d/*.conf
        が再生成され、backendの *:8000 VirtualHost にも

        RewriteEngine On
        RewriteCond %{HTTPS} off
        RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

        が生成されていました。

        nginxからApache:8000へはHTTPでproxyされるため、HTTPSアクセスでも
        Apache側では %{HTTPS}=off となり、同一HTTPS URLへの301が発生します。

        9.9.0時の正常な生成済み設定では、同箇所は RewriteEngine Off でした。

        また9.11.2では kusanagi restart のtest処理で全profile設定が再生成されることを確認しています。
        実際に kusanagi restart だけで現象を再現できました。

        暫定的に、source側のredirect条件へ
        X-Forwarded-Proto=https かつ proxy接続元127.0.0.1の場合を除外することで回避しています。

        9.11.2の httpd-behind-nginx における設定生成処理の不具合ではないかと考えています。
        ご確認いただけますでしょうか。

      • #1698
        hideishi
        Participant

          hirasawa3さん

          /etc/opt/kusanagi/httpd/httpd-with_nginx.conf に以下の記述があるかを確認いただけますか

          SetEnvIf X-Forwarded-Proto "^https$" HTTPS

          httpd-behind-nginxの場合にはproxyがX-Forwarded-Protoをnginx側で設定します。
          そのため、この条件に従ってnginxにHTTPSでアクセスがあったものはHTTPSが設定されます。
          HTTPSが設定されていればhttpd側のご指摘のrewriteルールは RewriteCond %{HTTPS} off が成立しないので
          通らないようになっています。

        • #1699
          hirasawa3
          Participant

            hideishiさん

            ご回答ありがとうございます。
            確認したところ、/etc/opt/kusanagi/httpd/httpd-with_nginx.conf には
            SetEnvIf X-Forwarded-Proto "^https$" HTTPS
            の記述があり、setenvif_module もロードされています。

            ただし、問題発生時の設定でApache:8000へ直接
            X-Forwarded-Proto: https
            を付与してアクセスしても、RewriteCond %{HTTPS} off によりApache自身からHTTPSへの301が返ることを確認しています。

            Apache公式ドキュメントでは、%{HTTPS} は環境変数ではなくmod_sslを直接参照し、TLSをreverse proxyで終端している場合はbackendで常にoffとなるため、%{HTTP:X-Forwarded-Proto} を確認するよう記載されています。

            SetEnvIf で設定した環境変数をmod_rewriteから参照する場合は %{ENV:HTTPS} になる認識ですが、KUSANAGI側では SetEnvIf ... HTTPS が %{HTTPS} に反映される独自の仕組み等がありますでしょうか。

            念のためご確認いただけますと幸いです。

          • #1700
            hideishi
            Participant

              hirasawa3さん

              再現確認できました。
              確かに %{HTTPS} は実際にsslで接続されないと設定されないようですね。

              短期的な回避策としては /etc/opt/kusanagi/httpd/conf.d/PROFILE.conf の中にある RewriteEngine On を Off にしてください。
              /etc/opt/kusanagi/httpd/conf.with_nginx.d/PROFILE.conf は上記を雛形に生成するので、上記がOffなら自動的にOffになります。
              おそらく元はOffだったものが https redirect などを設定してOnに変わったのではないでしょうか。
              9.10.0以降では雛形から設定の変更を自動反映するようになりましが。
              その結果、変更を拾ってしまって On になったのだと考えられます。

              RewrireRuleのリダイレクト処理自体がApache:8000側にそもそも不要なので、自動反映する際に該当ディレクティブを削除するように修正します。
              報告ありがとうございました。

            • #1701
              hirasawa3
              Participant

                hideishiさん

                ご確認いただき、ありがとうございました。
                ご対応をよろしくお願いいたします。

              • #1703
                hideishi
                Participant

                  hirasawa3さん

                  9.11.3-1 で修正しました。
                  アップデートしてご確認ください。

                • #1710
                  hirasawa3
                  Participant

                    hideishiさん

                    アップデートして正常を確認しました。
                    ご対応いただきありがとうございました。

                Viewing 6 reply threads
                • You must be logged in to reply to this topic.

                Next article

                フォーラムについて