2016-08-19 6 views
2

テストサーバーでは、Pyramid debug toolbarを使用していますが、スタティックコンテンツ(CSSやJavaScriptファイルなど)へのリンクはhttp://です。 HTTPS経由で提供されます。これにより、混在したコンテンツの警告が発生し、すべての機能が中断されます。 HTTPSリンクを生成する方法はありますか?HTTPSの代わりにHTTP経由でスタティックコンテンツを提供するPyramidデバッグツールバー

Chromeで混合コンテンツを有効にすることは可能ですが、これは機能しますが、QAチーム全体にとって実現可能な解決策ではありません。

答えて

2

これを実現するにはより良い方法と簡単な方法がありますが、これを達成するためにできることは、request.static_url()を呼び出すたびに_scheme='https'パラメータを追加することです。 route_urlようstatic_url作品の

from pyramid.url import URLMethodsMixin 

URLMethodsMixin.static_url_org = URLMethodsMixin.static_url # backup of original 

def https_static_url(self, *args, **kw): 
    kw['_scheme'] = 'https' # add parameter forcing https 
    return URLMethodsMixin.static_url_org(self, *args, **kw) # call backup 

URLMethodsMixin.static_url = https_static_url # replace original with backup 

パラメータ:あなたはコースの編集pyramid/url.pyのことができますが、あなたはまた、あなたのプロジェクトの__init__.pyでこれを行うことができるために

。 _schemeがhttpsとして渡され、_portが渡されない場合_schemeがHTTPとして渡され、_portが渡されていない場合は、_port値は、同様に443として渡されていると想定されていることを

注:ドキュメントから_port値は80として渡されたと見なされます。この動作を回避するには、_schemeを渡すたびに明示的に_portを渡します。 設定「_scheme」を自動的に通常あなたがX-Forwarded-Proto HTTPヘッダを通過することにより、HTTPではなくHTTPSを使用するようにWebサーバーを信号ポート443

1

を強制します。 nginxのから

例:

proxy_set_header X-Forwarded-Proto $scheme; 

しかし、これは標準ではありませんし、あなたのWebサーバの設定に依存してもよいです。 Nginx + uWSGIの完全な例は、

proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Host $server_name; 
    proxy_set_header X-Forwarded-Proto $scheme; 

    uwsgi_pass 127.0.0.1:8001; 
    uwsgi_param UWSGI_SCHEME https; 
    uwsgi_pass_header X_FORWARDED_PROTO; 
    uwsgi_pass_header X_REAL_IP; 

See how WebOb (underlying Request for Pyramid) reconstructs URL from given HTTP headersです。

関連する問題