1

特定の機能をHTTPS接続にロックダウンするPyramidアプリがあります。

サーバーの前面にはnginx(通常)があり、PasteDeployを使用してHTTPS接続を検出します。私のenvironment.iniから:

[filter:proxy-prefix]
use = egg:PasteDeploy#prefix

接続がHTTPSの場合、pastedeployはrequest.scheme変数をに設定します'https'

私は今、いくつかの統合テストを書き込もうとしていますがTestApp、webtestによって提供されるように、HTTPSであるかのようにリクエストを処理する方法を理解できないようです。

4

2 に答える 2

2

フィルターを含む完全な WSGI パイプラインをロードしていることを確認してください。そうでない場合、ヘッダーはミドルウェアによって変換されません。通常、これはget_app「myapp」ではなく「main」を呼び出すことを意味します。また、最終的にはミドルウェアが設定されているだけなので、WebTestのextra_environオプションを試すことをお勧めしenviron['wsgi.url_scheme']ます

testapp.get('/foo', extra_environ={'wsgi.url_scheme': 'https'})
于 2012-05-11T17:12:24.587 に答える
0

ドキュメントを 3 度目に調べて、PasteDeploy に基づく回避策を見つけました (おそらく正しい解決策)...

PasteDeploy は、https 接続を設定するために 2 つのヘッダーを探します。Cookie セッションの管理に使用するヘッダー dict にそれらを追加しましたが、最初は問題なく動作しているように見えました。

{
   "HTTP_X_FORWARDED_SCHEME" : 'https',
   "HTTP_X_FORWARDED_PROTO" : 'https',
}

PasteDeploy には if/else チェーンがあるため、必要なのは 1 つだけです... しかし、両方を送信すると機能します。

PasteDeploy は呼び出されないようですが、アプリにこれらのヘッダー/環境項目が表示されますが、https が設定されていません。

于 2012-05-11T16:38:18.630 に答える