Развертывание приложения Django на Apache + mod_wsgi с HTTP-аутентификацией - PullRequest
2 голосов
/ 07 декабря 2011

Можно ли развернуть приложение Django на Apache + mod_wsgi ( стандартным способом ), но с HTTP-аутентификацией перед всем этим?

По сути, мне нужен дополнительный уровень защиты HTTP, прежде чем какой-либо пользователь, аутентифицированный Django или анонимный, сможет даже получить доступ к приложению.

Возможно ли это? Если да, то куда идут директивы Apache auth?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Конечно, вот пример с одного сайта:

<VirtualHost *:80>
  ServerName djangoproject.domain.biz

  DocumentRoot "/home/user/websites/djangoproject/website/"

  WSGIDaemonProcess djangoproject python-path=/home/user/.virtualenvs/djangoproject/lib/python2
.6/site-packages/ user=user group=user threads=1
  WSGIProcessGroup  djangoproject
  WSGIScriptAlias / /home/user/websites/djangoproject/website/django.wsgi

  <Directory "/home/user/websites/djangoproject/website/">
    Order deny,allow
    Allow from all

    AuthType Basic
    AuthName "By Invitation Only"
    AuthUserFile /etc/apache2/passwords
    Require valid-user
  </Directory>

</VirtualHost>
2 голосов
/ 07 декабря 2011

Да, это возможно.

Если для mod_wsgi установлено значение /, любые ресурсы, предоставляемые Apache, должны быть указаны как псевдонимы.

Директивы Auth и ограничения хоста находятся в директивах Location.

Поэтому я отключил все ограничения доступа apache для таких вещей, как css, и предоставил доступ на основе host / ip к другому каталогу.

<VirtualHost *:80>
        Servername              app.domain.example
        CustomLog               logs/access_log combined
        ErrorLog                logs/error_log
        DocumentRoot            "/home/app/apache/app/html"

        Alias /media/           /home/app/apache/app/html/media/

        <Location />
                Options None
                AuthType                Basic
                AuthName                "Login Prompt"
                AuthUserFile            /path/to/passwd.file
                Require                 valid-user
        </Location>

        <Location /media>
                Order allow,deny
                Allow from all
                Satisfy any
        </Location>

        WSGIDaemonProcess       app user=app group=app processes=5 threads=1 display-name=app_WSGI
        WSGIProcessGroup        app
        WSGIScriptAlias         /       /home/app/apache/app.wsgi
</VirtualHost>
...