3

Pound -> Varnish -> Apache -> CentOS で新しいサーバーを構築しています。

Varnish は SSL では機能しないため、「X-Forwarded-Proto」をポンド単位で「https」に設定し、https の場合はそのように検出しています。

https://example.comのような URL に直接アクセスする場合は機能しますが、「htaccess」または「PHP」を使用して「http」から「https」にリダイレクトする場合は機能しません。X-Forwarded-Proto がリダイレクトで転送されないようです。そのため、無限のリダイレクト ループに陥ります。

JavaScript を使用してリダイレクトを実行する方法を見つけましたが、サーバー側のソリューションが望ましいと考えています。

それで、apache、pound、varnish などで変更する設定があるかどうか疑問に思っています。

次のような多くのソリューションを試しました。

////////////////
// htaccess
////////////////////
  RewriteCond %{HTTP:X-Forwarded-Proto} !https
  RewriteRule (.*) https://example.com [L,R]


///////////////////
// php 
//////////////////
if(isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https'){
    $_SERVER['HTTPS']='on'; 
}

if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != 'on'){
    header('Location: '. 'https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
}

Our pound config look like:

//////////////////
// pound
///////////////
ListenHTTPS

      Address 0.0.0.0 # all interfaces
      Port 443
      AddHeader "X-Forwarded-Proto: https"
      HeadRemove "X-Forwarded-Proto"
      HeadRemove "X-Forwarded-For"
      Cert "/path/to/certificate.pem

      Service
            BackEnd
                  Address 10.0.0.1
                  Port 80
                  Priority 1
            End

      End
End

私たちを助けてくれたおかげで、私たちはその問題に多くの時間を費やしました!

4

2 に答える 2