2016-08-19 4 views
2

На наших тестовых серверах мы используем Pyramid debug toolbar, однако он создает ссылки http:// на статический контент (например, его файлы CSS и JavaScript), а остальная часть содержимого подается через HTTPS. Это вызывает предупреждения смешанного содержания, и это разрушает все функциональные возможности. Есть ли способ заставить его создавать HTTPS-ссылки?Панель инструментов отладки Pyramid, обслуживающая статический контент через HTTP вместо HTTPS

Я знаю, что можно включить смешанный контент в Chrome, и это работает, но это не приемлемое решение для всей команды QA.

ответ

2

Возможно, для этого есть лучшие/более простые способы, но одна вещь, которую вы можете сделать для достижения этого, добавляет параметр _scheme='https' к каждому звонку до request.static_url().

Для этого вы можете, конечно, редактировать pyramid/url.py, но вы также можете сделать это в ваши проекты __init__.py:

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 

Параметры для static_url работ как route_url. Из документации:

Обратите внимание, что если _scheme передается как по протоколу HTTPS, и _port не передается, то предполагается, что значение _port, что был принят в качестве 443. Аналогично, если _scheme передается как HTTP и _port не передается , считается, что значение _port было передано как 80. Чтобы избежать такого поведения, всегда явно передавайте _порт всякий раз, когда вы передаете _scheme. Установка «_scheme» автоматически заставляет порт 443

1

Обычно сигнализировать ваш веб-сервер для использования HTTPS вместо HTTP, проходя через X-Forwarded-Proto заголовок HTTP.

Пример из 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.

Смежные вопросы