在CentOS 6.8上使用mod_wsgi和apache从Django提供文件

时间:2016-09-16 09:22:04

标签: django apache web mod-wsgi wsgi

我有一个django Web应用程序,我需要从CentOS 6.8上的apache服务器提供服务。为了得到这个,我使用mod_wsgi。

我的项目位于/ path / to / myproject。

就在那里,我有以下目录和文件:

- Add to httpd.conf the following information:
    <VirtualHost *:80>
        Alias /static /path/to/myproject/static
        Alias /app1 /path/to/myproject/app1

        <Directory /path/to/myproject/static>
            Order allow,deny
            Allow from all
        </Directory>

        <Directory /path/to/myproject/app1>
            Order allow,deny
            Allow from all
        </Directory>

        <Directory /path/to/myproject/myproject>
            <Files wsgi.py>
              Order allow,deny
              Allow from all
            </Files>
        </Directory>

        WSGIDaemonProcess myproject user=myuser group=mygroup python-path=/path/to/myproject:/path/to/myproject/myprojectenv/lib/python2.7/site-packages
        WSGIProcessGroup myproject
        WSGIScriptAlias / /path/to/myproject/myproject/wsgi.py
    </VirtualHost>

我已经添加到我的setting.py这个指令:STATIC_ROOT = os.path.join(BASE_DIR,“static /”),我试图运行django服务器,我可以正确看到我的应用程序视图。

所以,之后我尝试配置apache服务器,以便从我的浏览器向我的应用程序发送请愿书,但是apache上升了403 Forbidden错误。

我遵循的步骤是:

- sudo usermod -a -G myuser apache
- chmod 710 /home/myuser
- chmod 664 ~/myproject/db.sqlite3
- sudo chown :apache ~/myproject/db.sqlite3
- sudo chown :apache ~/myproject

然后,我给了apache用户权限,以便允许apache访问我的django项目:

LastWriteTime

最后,我重新启动了htttpd服务并尝试向我的应用发送请愿书,但我收到了“403 Forbidden错误”。

之后,我尝试将我的django项目复制到apache目录/ var / www /并且这样做,我最终可以看到我的django文件,但就像文件一样,apache无法运行我的应用程序并正确显示我的视图

我认为问题可能与apache用户的权限有关,但我不知道我还能做些什么。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

Apache错误日志中的实际错误是什么,而不是浏览器中的403错误?

问题很可能是由于您的主目录为710。这意味着其他用户(如Apache用户)无法进入您的主目录。它需要能够像Apache用户那样将URL映射到WSGI应用程序。

将整个项目移到主目录之外,或者在myproject.wsgi或类似内容下创建一个名为/var/www/myproject的单独WSGI脚本文件,其中包含:

from myproject.wsgi import application

同样改变:

    WSGIScriptAlias / /path/to/myproject/myproject/wsgi.py

    <Directory /path/to/myproject/myproject>
        <Files wsgi.py>
          Order allow,deny
          Allow from all
        </Files>
    </Directory>

为:

    WSGIScriptAlias / /var/www/myproject/myproject.wsgi

    <Directory /var/www/myproject>
        <Files myproject.wsgi>
          Order allow,deny
          Allow from all
        </Files>
    </Directory>

Apache用户只需要在进行URL映射时能够看到WSGI脚本文件。应用程序代码实际上将在您的情况下以守护进程模式运行,用户myuser可能会从您的主目录中读取内容。

您还不需要将目录/文件的所有权更改为Apache用户,因为代码将以myuser运行。