dam*_*mon 7 django ssl apache2
我的django应用程序(让我称之为partlysecureapp)有一个所有人都可以看到的索引页面.所有其他页面(可以从索引页面上的链接访问)需要用户登录.我想在apache2中使用带有SSL的应用程序.
我已经mysecureapp在使用SSL的apache上部署了一个应用程序(比如说),其中所有页面都需要用户登录.我已按如下方式设置此配置.
我的apache2 /etc/apache2具有以下目录结构.
/etc/apache2/
|--conf.d---*charset,security,localized-error-pages*
|---mods-available---...
|---mods-enabled---...
|---sites-available---default,default-ssl,ssl
|---sites-enabled---shortcut to ssl
|---apach2.conf
|---httpd.conf
|---ports.conf
|---magic
|---envvars
Run Code Online (Sandbox Code Playgroud)
对于secureapp,我已将其设置为文件sites-available/ssl
<VirtualHost *:443>
ServerAdmin webmaster@localhost
DocumentRoot /home/dev/python/django/mysecureapp
SSLEngine on
SSLOptions +StrictRequire
SSLCertificateFile /etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
...
WSGIScriptAlias /mysecureapp /home/dev/python/django/mysecureapp/mysecureapp.wsgi
Alias /site_media/ /home/dev/python/django/mysecureapp/media/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
这完美地工作..
部署我的partlysecureapp,
http://127.0.0.1:8080/partlysecureapp/需要显示所有人都可以访问的索引页面.但
../partlysecureapp/link1/
../partlysecureapp/link2/
../partlysecureapp/link3/
Run Code Online (Sandbox Code Playgroud)
需要登录,应该通过ssl提供.
我想,我需要WSGIScriptAlias为我添加另一个partlysecureapp.我是否需要添加其他DocumentRoot的partlysecureapp?如何告诉apache 8080通过ssl端口从端口和其他人服务索引页面?
截至目前,这/etc/apache2/httpd.conf是空白.只有sites-available/ssl文件有VirtualHost元素.
首先,让我们将问题分开:一件事是要求登录,另一件是需要SSL.前者是Django特有的,应该在你的观点中处理; 对于后者,恕我直言,您应该考虑通过SSL 提供一切服务的可能性,这将简化您的设置.当然,这有一些开销,由您来决定是否对您的特定情况重要.
也就是说,对于您提出的方案:
要从普通HTTP 提供任何服务,您需要监听端口80(或者,在您的情况下8080).因此,您需要一个单独的VirtualHost绑定到该端口,并为自己使用单独的WSGI应用程序.
要允许来自此虚拟主机的单个路径(您的索引文件),但要求受SSL保护的其他所有内容服务,您可以使用mod_rewrite:
RewriteEngine On
RewriteRule ^/partlysecureapp$ - [L,NC]
RewriteRule (.*) https://127.0.0.1/partlysecureapp%{REQUEST_URI} [L,R=301]
Run Code Online (Sandbox Code Playgroud)
如果路径与您的根路径完全相同,则第一条规则告诉Apache不要执行任何重定向; 第二个将其他所有内容重定向到https(将由您的*:443虚拟主机处理).
(注意:您可能也希望在/site_media没有SSL的情况下提供服务)
然后你可以简单地添加你的WSGI别名; 即使Django将用户发送到不同的页面,Apache也会确保通过SSL提供页面.
你最终的代码是这样的:
<VirtualHost *:8080>
ServerAdmin webmaster@localhost
DocumentRoot /home/dev/python/django/partlysecureapp
RewriteEngine On
RewriteRule ^/partlysecureapp$ - [L,NC]
RewriteRule ^/site_media - [L,NC]
RewriteRule (.*) https://127.0.0.1/partlysecureapp%{REQUEST_URI} [L,R=301]
...
WSGIScriptAlias /partlysecureapp /home/dev/python/django/partlysecureapp/partlysecureapp.wsgi
Alias /site_media/ /home/dev/python/django/partlysecureapp/media/
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
并且您的受SSL保护的虚拟主机的代码将与那个相同mysecureapp(partlysecureapp当然,请使用;请注意,您可以同时运行这两个应用程序,只需注意您的路径MEDIA和STATIC路径).
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |