2017-01-18 6 views
0

SCRIPT_NAMEを設定しようとしているnginxの背後にあるピラミッドアプリがプロキシされています。ピラミッド:request.environでSCRIPT_NAMEを設定する方法

私が試した:シェルpserveでそれを輸出

  • は、シェルnginxでそれを輸出
  • で実行されているが
  • 手動ピラミッドの設定ファイルで定義する
  • で実行されていますgevent.wsgi.WSGIServer.environの前に設定する。serve_forever()

最後のステップで定義した非標準値が利用可能ですが、SCRIPT_NAMEは常に空です。これは他の場所から上書きされているようです。

どうすれば設定できますか?

答えて

0

SCRIPT_NAMEは、要求ごとにWSGIサーバーによって設定されます。サーバにフックが設定されていない場合(ウェイトレスにurl_prefix=...の設定がある場合)、ミドルウェアスタックを停止するときに、簡単に設定することができます。独自のカスタムミドルウェアを作成する代わりに、SCRIPT_NAMEに追加できるプレステージミドルウェアを使用することもできます。また、wsgi.url_schemeをオーバーライドして、X-Forwarded-Protoヘッダーを翻訳してhttpsに役立てることもできます。

ミドルウェアを使用する最も良い方法は、それをiniファイルに追加することです。ウェイトレスのドキュメントには良い例がいくつかあります。もっと明確にするために、私は下の方を複製します。 [1]

[app:myapp] 
use = egg:mypackage#myapp 

[filter:paste_prefix] 
use = egg:PasteDeploy#prefix 

[pipeline:main] 
pipeline = 
    paste_prefix 
    myapp 

[server:main] 
use = egg:waitress#main 
listen = 127.0.0.1:8080 

http://docs.pylonsproject.org/projects/waitress/en/latest/#using-behind-a-reverse-proxy

1

はrepoze.vhmを見てください。

通常、すべての仮想ホスティングの問題を解決します。 (サブパス、仮想ルートなど)。 repoze.vhmの最大の利点は、あなたのピラミッドアプリが外部urlとパスを完全に認識できないことです。あなたはあなたのサイト/アプリケーションのURLを生成する際にrequest.route_urlと他の方法を使用することに注意しなければなりません(しかし、とにかくそれは良い練習でなければなりません)。

https://github.com/repoze/repoze.vhm

関連する問題