我有一个 Django 应用程序,我想将 SSL 应用于管理页面。因为管理页面是唯一需要 SSL 的页面,所以我想使用 apache 配置文件而不是使用 SSLMiddleware 来做到这一点。我的(部分)apache 配置文件如下所示:
<VirtualHost *:80>
.
.
DocumentRoot /home/www/sites_django/wmssite
.
<Directory "/home/www/sites_django/wmssite">
.
</Directory>
<Location "/admin">
RewriteEngine On
RewriteRule ^/(.*) https://www.whitemoorstudio.pvm/admin [L,R=301]
</Location>
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateFile "/usr/local/etc/apache22/www_whitemoorstudio_pvm.crt"
SSLCertificateKeyFile "/usr/local/etc/apache22/www_whitemoorstudio_pvm.key"
.
.
</VirtualHost>
TLD .pvm 是我仅用于在内部网络上进行测试的本地 TLD。
我已经设置了一个自签名证书并且它可以正常工作,嗯......有点。奇怪的是,由于某种原因,当重写到 https 时,它找不到/media 目录中的媒体文件,没有图像,没有 css,没有 js。 apache 错误日志告诉我它正在目录/usr/local/www/apache22/data/media 中查找:
[Sat Nov 06 20:45:18 2010] [error] [client 192.168.1.134] File does not exist: /usr/local/www/apache22/data/media, referer: https://www.whitemoorstudio.pvm/admin/
当我不将管理媒体目录/usr/local/www/apache22/media 重写为 https 时。这个目录 media 是一个逻辑链接:
media -> /usr/local/lib/python2.5/site-packages/django/contrib/admin/media
我不知道为什么没有 SSL 它正在查找:
/usr/local/www/apache22/media
并且在 SSL 中:
/usr/local/www/apache22/data/media
最后一个目录不存在!!!
有人知道吗?
最佳答案
问题已经解决了。在 VirtualHost *:443 容器中添加东西时
我忘记指定 DocumentRoot 指令,所以它在主 httpd.conf 中指定。
它在 VirtualHost *:80 容器中运行良好,因为在那个部分我指定了 DocumentRoot。
在 httpd.conf 中它被指定为: DocumentRoot "/usr/local/www/apache22/data"
关于django SSL apache 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4115590/