繁体   English   中英

使用Apache和Django将代码放置在文档根目录问题之外

[英]Placing code outside of document root problems with Apache and Django

我在执行Django关于代码放置的建议时遇到了麻烦。 我搜索了Google,并尝试了所有类型的VirtualHost配置。 但是,我无法让Django站点像Django的内置测试Web服务器那样与Apache一起使用。

我正在使用Django 1.5.4和mod_wsgi

Django文档指出:

该代码应该放在哪里?

如果您的背景是普通的旧PHP(不使用现代框架),则可能习惯于将代码放在Web服务器的文档根目录下(例如/ var / www)。 使用Django,您无需这么做。 将任何这些Python代码放在​​Web服务器的文档根目录中不是一个好主意,因为这冒着人们可能能够通过Web查看您的代码的风险。 这对安全性不利。

将您的代码放在文档根目录之外的某个目录中,例如/ home / mycode。

在尝试这样做时,我失败了。

这是我的目录结构的示例:我有/ home / user / djangoRoot,我想将其作为文档根目录,将/ home / user / djangoCode放在我的代码放置位置。 我已按照运行django-admin.py startproject djangoSite的教程django-admin.py startproject djangoSite并且所有文件夹和文件均已创建。 数据库同步效果很好。 当我使用Django的内置测试Web服务器时,可以查看该站点。 但是我感觉apache虚拟主机出了点问题,因为我无法用apache来查看网站。

同样,本着使代码脱离文档根目录的精神,我希望将djangoRoot作为我的根目录,并将djangoCode作为我的代码目录(其中带有djangoSite / djangoSite目录,这些目录是在运行django-admin.py start project djangoSite命令后创建的) )。

我试过了

  1. 将DjangoCode / DjangoSite设为我的根目录,但是我可以在浏览器中看到文件结构
  2. 建议从VirtualHost消除DocumentRoot。
  3. 我尝试了从django和其他地方收集的东西

没有工作。

这是我当前的Apache VirtualHost

WSGIPythonPath /home/user/djangoCode/djangoSite/djangoSite

<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName example.com
ServerAlias www.example.com

DocumentRoot /home/user/djangoRoot
<Directory /home/user/djangoRoot>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

WSGIScriptAlias /djangoRoot /home/user/djangoCode/djangoSite/djangoSite/wsgi.py

<Directory "/home/user/djangoCode/djangoSite/djangoSite/wsgi.py">
<Files wsgi.py>
    Order deny,allow
    Allow from all
</Files>
</Directory>

    ...
</VirtualHost>

目前,这仅允许我查看没有django迹象的文档根目录。 我的虚拟主机配置错误吗? 我是否将此“代码超出文档根目录范围”?

我真的不明白您为什么这么难找到,但是您显然根本没有关注我。 在文档中进行解释的重点是,代码所在的文件系统完全独立于Apache所处的位置。 后者由WSGIScriptAlias的第一个参数给出。 前者由第二个参数给定。

文档根目录是Apache从中提供文件的默认位置。 但是您不提供文件,而是运行代码来提供动态内容。 因此,在WSGIScriptAlias的第一个参数给出的点上,您将代理到WSGI应用程序。 那是您网站的根URL。 在您给出的示例中,这意味着-假设您的域名为example.com您的Django应用将可以在example.com/djangoRoot下访问。 如果您实际上是在浏览器中访问过该URL,则将在urls.py中的/下看到任何配置的页面。 几乎可以肯定这不是您想要的。 在绝大多数情况下,第一个参数(如docs中所示)应为/

因此,我不确定您为什么认为这违反了安全警告。 在这里,文档根目录默认保持为默认值-通常为/var/www /home/user/djangoCode/...但代码位于/home/user/djangoCode/... ,并位于/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM