2016-08-19 13 views
2

테스트 서버에서는 Pyramid debug toolbar을 사용하지만 정적 컨텐츠 (CSS 및 JavaScript 파일)에 http:// 링크를 생성하는 반면 나머지 컨텐츠 HTTPS를 통해 제공됩니다. 이로 인해 혼합 된 내용 경고가 발생하고 모든 기능이 중단됩니다. HTTPS 링크를 강제로 생성하는 방법이 있습니까?HTTPS 대신 HTTP를 통해 정적 컨텐츠를 제공하는 Pyramid 디버그 도구 모음

Chrome에서 혼합 콘텐츠를 사용하도록 설정하는 것이 가능하지만이 방법이 효과적이지만 전체 품질 관리 팀에게는 실현 가능한 해결책이 아닙니다.

답변

2

이 방법을 사용하는 것이 더 좋거나 더 쉬운 방법 일 수 있지만이를 달성하기 위해 할 수있는 한 가지는 request.static_url()을 호출 할 때마다 _scheme='https' 매개 변수를 추가하는 것입니다. 이를 위해

당신이 할 수있는 코스 편집 pyramid/url.py,하지만 당신은 또한이 작업을 수행 할 수의 프로젝트 ' __init__.py : 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 

매개 변수. 문서에서 :

_scheme가 HTTPS로 전달되며, _Port이 경과되지 않은 경우 _Port 값이 _scheme은 HTTP로 전달되고 _Port이 경과되지 않은 경우, 마찬가지로 443로 전달 된 것으로 추정된다

주 _port 값은 80으로 전달 된 것으로 간주됩니다.이 동작을 피하려면 _scheme을 전달할 때마다 _port를 항상 명시 적으로 전달하십시오. 설정은 '_scheme는'자동으로 포트를 강제로 443

1

보통 당신이 X-Forwarded-Proto HTTP 헤더를 통해 전달하여 HTTP 대신 HTTPS를 사용하도록 웹 서버를 신호. Nginx에에서

예 :

proxy_set_header X-Forwarded-Proto $scheme; 

그러나이 표준하지 않고 웹 서버 구성에 따라 달라질 수 있습니다. 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