Сертификат Django SSL и статический носитель - PullRequest
2 голосов
/ 08 апреля 2011

Я создаю приложение Django, которому потребуется SSL на всех страницах, обращенных к пользователю.В других проектах, где требовался SSL, у меня возникали сложности при обслуживании медиа-файлов с другого виртуального хоста на одном сервере.Например, страница выглядит так: https://www.mysite.com, но она ссылается на http://media.mysite.com/css/screen.css,, и браузер впоследствии отображает пользователю предупреждения о безопасности.

Насколько я понимаю, в Django рекомендуется хранить статические файлы.по крайней мере на их собственном виртуальном хосте, который, насколько я знаю, требует субдомена, такого как media.blahblah.com.

Очевидно, что по SSL есть множество приложений Django, поэтому я должен что-то упустить.Любой совет о том, как это управляется?

1 Ответ

4 голосов
/ 08 апреля 2011

Общий ответ: вам нужно изменить URL-адрес, который вы используете для ссылки на ваши статические файлы, на тот, который использует HTTPS. Использование относительного пути (/static/css/screen.css) вместо абсолютного URL (http: // ...) заставляет ваши медиафайлы автоматически переключаться с HTTP на HTTPS в зависимости от ссылающейся страницы, но заставляет вас при попытке служить в соответствии с лучшими практиками, описанными ниже.

Если вы используете Django 1.3 с contrib.staticfiles, может показаться, что вам просто нужно изменить настройку STATIC_URL. Если нет, вам придется обновить пути вручную (или, тем не менее, вы указываете свои статические ресурсы).

Лучшие практики для статических носителей, таких как CSS и JavaScript, требуют, чтобы вы обслуживали их с веб-сервера (не только виртуального хоста), отличного от того, который обслуживает ваши страницы Django. Идея заключается в том, что вы можете использовать веб-сервер, занимающий мало места, чтобы очень быстро обслуживать эти простые файлы. Если вы обслуживаете их с того же веб-сервера, на котором работает ваш сайт Django, то, скорее всего, загружается несколько дополнительных модулей, но они не используются для запросов, когда вы просто обслуживаете статический файл.

Поскольку вам нужно обслуживать защищенные статические файлы, у вас есть несколько вариантов:

  1. Вам потребуется либо получить отдельный (или подстановочный) SSL-сертификат для вашего статического файла веб-сервера.
    • Con : дополнительная плата за сертификат
    • Con : вам придется указать другой домен (вместо относительных путей, описанных в первом абзаце) для обслуживания ваших статических файлов из.
  2. Настройте SSL на обратном прокси-сервере, который обрабатывает все запросы для вашего сайта. Вы по-прежнему обслуживаете статические файлы и страницы Django с отдельных веб-серверов, но прокси-сервер знает, к какому из них подключаться, основываясь на URL-адресе или пути (например: proxy "/ static" из статического веб-сервера, все остальное из веб-сервера Django) ,
    • Pro : Позволяет ли вам использовать относительные пути к вашим носителям.
    • Con : Настройка дополнительных систем.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...