使用Apache和Djang将代码放在文档根问题之外

2024-06-27 02:07:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难实现Django的代码放置建议。我搜索过谷歌,除了尝试所有类型的虚拟主机配置之外。但是,我不能让Django站点像使用Django的内置测试web服务器那样与Apache一起工作。在

我使用的是django1.5.4和mod_wsgi

Django文件指出:

Where should this code live?

If your background is in plain old PHP (with no use of modern frameworks), you’re probably used to putting code under the Web server’s document root (in a place such as /var/www). With Django, you don’t do that. It’s not a good idea to put any of this Python code within your Web server’s document root, because it risks the possibility that people may be able to view your code over the Web. That’s not good for security.

Put your code in some directory outside of the document root, such as /home/mycode.

但在努力做到这一点上,我失败了。在

下面是我的目录结构的一个例子:我有/home/user/djangoot,我希望它作为文档根目录,而/home/user/djangoCode用于放置代码的位置。我已经按照教程运行了django-admin.py startproject djangoSite,所有的文件夹和文件都是按照它们应该的方式创建的。数据库同步工作得很好。当我使用Django的内置测试web服务器时,我可以查看该站点。但是我觉得我的apache虚拟主机出了问题,因为我不能用apache同样的方式查看站点。在

同样,出于将代码排除在文档根目录之外的精神,我希望djangoot作为我的根目录,djangoCode作为我的代码目录(其中包含运行django-admin.py start project djangoSite命令后创建的djangoSite/djangoSite目录)。在

我试过了

  1. 使DjangoCode/DjangoSite成为我的根目录,但我可以在浏览器中看到文件结构
  2. 从虚拟主机中删除DocumentRoot,这是很多建议。在
  3. 我试过从django和其他人那里收集到的东西

都没用。在

这里是我当前的apache虚拟主机

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符号的文档根。 我的虚拟主机配置错误吗? 我是不是把这个“文档根之外的代码”看得太远了?在


Tags: thedjango代码文档pywsgihomeyour
1条回答
网友
1楼 · 发布于 2024-06-27 02:07:01

我真的不明白你为什么觉得这很难,但你显然一点也不跟着我。文档中解释的重点是,您的代码在文件系统中的位置与Apache为其提供服务的位置完全独立。后者由WSGIScriptAlias的第一个参数给出。前者由第二个参数给出。在

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

所以我不知道你为什么认为这违反了安全警告。在这里,文档根在默认情况下保持在任何位置(通常是/var/www),但代码位于/home/user/djangoCode/...中,并在{}处提供服务。在

相关问题 更多 >