Запуск администратора django через https с использованием apache2 - PullRequest
1 голос
/ 14 октября 2010

У меня есть веб-приложение django, работающее на apache 2.2.14, и я хочу запустить приложение администратора через https.

Прочитав много дискуссий об использовании прокси, написании промежуточного программного обеспечения, запуске альтернативных сценариев wsgi, главы в #httpd пришли мне на помощь.Решение настолько простое, что я был удивлен, что не нашел его в Интернете, поэтому мне любопытно посмотреть, допустил ли я какие-то явные предположения или ошибки.

Одним из осложнений было то, что я тоже хотел запуститьодно из моих django-приложений на сайте через https, это все, что находится в /checkout.

По сути, если пользователь запрашивает URI, начинающийся с / admin или / checkout на http, они должны быть перенаправлены на этот URIно по https.И наоборот, если пользователь запрашивает URI, который не начинается с / admin или / checkout по https, они должны быть перенаправлены на этот URI, но по http.

Ключом к решению этой проблемы было использование Redirect иДирективы RedirectMatch в моей конфигурации VirtualHost.

<VirtualHost *:80>

    ... host config stuff ...

    Redirect /admin https://www.mywebsite.com/admin
    Redirect /checkout https://www.mywebsite.com/checkout

</VirtualHost>
<VirtualHost *:443>

    ... ssl host config stuff ...

    RedirectMatch ^(/(?!admin|checkout).*) http://www.mywebsite.com$1

</VirtualHost>

Ответы [ 3 ]

3 голосов
/ 09 октября 2012

Другой подход заключается в использовании @secure_required decorator.Это автоматически перезапишет запрошенный URL и перенаправит на https://... версию URL.Тогда вам не нужно иметь Redirect в конфигурации *:80.*:443 Конфигурация все еще может потребоваться для повышения производительности, если вы хотите, чтобы другой трафик проходил через обычный трафик http.

1 голос
/ 10 декабря 2012

Я попробовал ваше решение, но столкнулся с несколькими проблемами.Во-первых, исчезло форматирование на сайте администратора, как будто он не мог найти статические файлы администратора.Во-вторых, если бы я попытался добраться до сайта без прав администратора через https, браузер не нашел бы его и перенаправил бы меня на поиск Yahoo.Как ни странно, если бы я отредактировал поисковый URL Yahoo, чтобы удалить весь текст, кроме моего правильного (минус http://), он продолжил бы поиск по сайту через Yahoo.Однако, введя тот же самый URL-адрес, вы отправили меня на мой сайт.

Я решил все эти проблемы, просто удалив директиву

RedirectMatch ^(/(?!admin|checkout).*) http://www.mywebsite.com$1

.

Я должен упомянутьчто у меня нет раздела / checkout на моем сайте, и я только пытаюсь защитить / admin.... и да, я заменил свой URL на "mywebsite.com"

0 голосов
/ 14 октября 2010

То, что вы описали, должно работать, но в будущем может возникнуть проблема, если вам нужно будет внести изменения в пути, которые являются / не являются HTTPS. Поскольку этот метод требует способности правильно изменить файл конфигурации Apache, это означает, что вы не хотите, чтобы новички в цикле. Завинтите файл конфигурации, и ваш сайт может получить 500 ошибок в мгновение ока.

Мы выбрали простой текстовый файл со списком путей, которые должны быть HTTPS. Редактировать его может любой пользователь проекта, и он проверяется на правильность при загрузке. Мы обрабатываем любые необходимые перенаправления в / из HTTPS в промежуточном программном обеспечении, и это, кажется, работает просто отлично. Этот метод также будет работать, если вы запускаете что-то отличное , чем Apache.

...