是否可以在Apache + mod_wsgi(the standard way)上部署Django應用程序,但在整個事物的前面使用HTTP驗證?在Apache + mod_wsgi上使用HTTP驗證部署Django應用程序
基本上,我需要一個額外的HTTP安全層,之前,任何用戶,Django認證或匿名,甚至能夠到達該應用程序。
這可能嗎?如果是這樣,Apache auth
指令在哪裏去?
是否可以在Apache + mod_wsgi(the standard way)上部署Django應用程序,但在整個事物的前面使用HTTP驗證?在Apache + mod_wsgi上使用HTTP驗證部署Django應用程序
基本上,我需要一個額外的HTTP安全層,之前,任何用戶,Django認證或匿名,甚至能夠到達該應用程序。
這可能嗎?如果是這樣,Apache auth
指令在哪裏去?
是的,這是可能的。
使用/
上的mod_wsgi,需要將由apache提供的任何資源列爲別名。
驗證指令和主機限制住在Location
指令中。
所以我禁用了像css之類的任何apache訪問限制,並提供了基於主機/ 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>
當然,我這裏是從一個網站:
<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>
請注意,將DocumentRoot設置爲源代碼的位置,包括使用數據庫密碼的settings.py是一個不好的主意。如果您要將WSGIScriptAlias註釋掉,則可以下載所有源代碼。將django.wsgi粘貼到子目錄中,並且只爲該特定子目錄設置「全部允許」,這也是很好的做法。您已經爲整個源設置了訪問權限,這就是爲什麼DocumentRoot在您的情況下非常危險。 –
非常好的一點,我會留下未經編輯的回答作進一步參考。 – bmihelac
謝謝你,爲我工作。我可以自由地從你的答案中編輯不必要的細節,只留下一些東西的要點。 –
也許有更多的細節,然後有必要。很高興我現在沒有爲靜態文件添加'Expires'處理!總是樂意離開工作Apache配置的地方,人們可以找到他們。 – MattH
嗨,謝謝你的回答。但是因爲我對這個東西很新鮮。你介意解釋如何創建passwd文件嗎? –