1

マシン上で実行されているシェフサーバー(ポート4000でリッスンしている)があり、SSL経由でアクセスしたいと思います。そのためにApacheリバースプロキシを設定しました(ポート4001でリッスンしています)。Apacheのセットアップは次のようになります(私のマシン名はwww.example.comに置き換えられています)

Listen 4001

<VirtualHost *:4001>

   SSLEngine on
   SSLCertificateFile    /etc/ssl/certs/ssl-cert-snakeoil.pem
   SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key

   ProxyRequests     Off
   ProxyPreserveHost On

   <Proxy http://localhost:4000*>
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass         /  http://localhost:4000/
   ProxyPassReverse  /  http://localhost:4000/
   ProxyPassReverse  /  http://www.example.com:4000/
   ProxyPassReverse  /  http://www.example.com:4001/

   CustomLog ${APACHE_LOG_DIR}/chef.access.log common
   ErrorLog ${APACHE_LOG_DIR}/chef.error.log

</VirtualHost> 

問題は、chef API呼び出しによって返されるJSONのURLに、httpsではなくhttpが含まれていることです。たとえば、次のようになります。

http://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea

それ以外の:

https://www.example.com:4001/sandboxes/a25fa2615d3d4dbd91e91a5e3a76c0ea

1つの例は、POSTを実行/sandboxesして新しいサンドボックスを作成する場合です。これにより、上記のリンクが作成されます。これは、ナイフを使用して料理本をアップロードしようとするようなことを壊します。

私の知る限り、 POSTによって呼び出されるchef server createメソッドは、 Merbabsolute_urlヘルパーメソッドを呼び出してURLを生成します。/sandboxes

この時点で、私はこの問題を修正する方法について困惑しています。どういうわけか、Apacheリバースプロキシ設定を変更する必要がありますか?chefサーバーの構成オプションですか?または、他の何か?

4

1 に答える 1

1

追加する必要があると思います:

RequestHeader set X-Forwarded-Proto "https"

Apache構成に。

これにより、ApacheX-Forwarder-Proto: httpsはChef/Merbサーバーへのすべてのリクエストにヘッダーを追加します。options[:protocol] ||= request.protocolMerbは、リクエストを安全なものとして扱うかどうかを決定するときに、このヘッダーをチェックします( inabsolute_urlからrequest#protocoltoまでのリクエストに従うことができますrequest#ssl?)。

ディレクティブはバックエンドからヘッダーを変更するProxyPassReverseだけで、コンテンツは変更しません(コンテンツ内のURLの解析と認識が必要になります)。このヘッダーを渡すことで、Merbは、リクエストがSSLを使用しているかのように動作する必要があることを認識し、必要に応じてリンクを作成できます。

于 2012-01-31T03:06:11.943 に答える