我有一个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用户的权限有关,但我不知道我还能做些什么。
我做错了什么?
答案 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
运行。