Django + Apache + mod_wsgi权限被拒绝
我完成了Django网站上有关使用mod_wsgi
(here)的教程,并且在适当的情况下替换了我的路径,导致胖子“权限被拒绝”。当我尝试访问/时。这是我加入httpd.conf
东西(mod_wsgi
早在conf文件中启用):Django + Apache + mod_wsgi权限被拒绝
# Django configuration
WSGIScriptAlias//usr/local/django/billing/apache/django.wsgi
<Directory /usr/local/django/billing/apache/django.wsgi>
Order allow,deny
Allow from all
</Directory>
AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1
Alias /media/ /usr/local/django/billing/media/
Alias /static/ /usr/local/django/billing/static/
<Directory /usr/local/django/billing/static>
Order deny,allow
Allow from all
</Directory>
<Directory /usr/local/django/billing/media>
Order deny,allow
Allow from all
</Directory>
编辑#1:
我已经通过幻灯片了多次,从开始:仍然没有快乐。即使在打开脚本的路径之后,chmod将每个相关目录设置为可读,并修改.wsgi脚本,但我仍然拒绝了权限。如果我将目录路径从/usr/local/django/billing/apache/django.wsgi
更改为截断django.wsgi
,服务器将返回配置错误,尽管它是在幻灯片中配置的。
同样的配置,同样的环境......但一切工作,除了在我的Django/Python的程序中的一个简单的调用POPEN()...
“权限被拒绝”
原来是SELINUX(强制模式)阻挡apache的。
你可以让SELINUX高兴与您的应用程序运行以下命令:
# semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/your/app(/.*)?'
# restorecon -R -v /path/to/your/app
这也是我的问题的原因。我不得不关闭SELinux。您可以通过阅读/ etc/selinux/config文件来检查当前值。或者,运行getenforce显示当前设置。如果你想禁用它,运行setenforce 0将它设置为宽容。 我不确定保持SELinux处于运行状态并同时解决此问题的最佳方法是什么。 – 2015-11-02 18:17:19
我有同样的问题,有时这happends如果WSGI应用程序位于已配置为可访问任何目录以外Apache,特别是当它位于你的主目录时,它很好的指定user = username指令。
的/ etc/apahe2 /位点-avaliable/myvhost [段]
WSGIDaemonProcess localhost python-path=/home/hemanth/ecm:/home/env/lib/python2.7/site-packages user=hemanth
WSGIProcessGroup localhost
的/ etc/apahe2 /位点-avaliable/myvhost [FULL]
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName localhost
ServerAlias localhost
DocumentRoot /home/hemanth/ecm
<Directory /home/hemanth/ecm>
Order allow,deny
Allow from all
</Directory>
WSGIScriptAlias//home/hemanth/ecm/index.wsgi
WSGIDaemonProcess localhost python-path=/home/hemanth/ecm:/home/env/lib/python2.7/site-packages user=hemanth
WSGIProcessGroup localhost
Alias /static/ /home/hemanth/ecm/static/
Alias /media/ /home/hemanth/ecm/media/
<Directory /home/hemanth/ecm/media/>
Order allow,deny
Allow from all
</Directory>
<Location "/static/">
Options -Indexes
</Location>
ErrorLog /home/hemanth/ecm/error.log
</VirtualHost>
索引.wsgi
import os
import sys
import site
# Add the site-packages of the chosen virtualenv to work with
site.addsitedir('/home/hemanth/env/local/lib/python2.7/site-packages')
# Add the app's directory to the PYTHONPATH
sys.path.append('/home/hemanth/ecm')
sys.path.append('/home/hemanth/ecm/ecm')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ecm.settings")
# Activate your virtual env
activate_env="/home/hemanth/env/bin/activate_this.py"
execfile(activate_env, dict(__file__=activate_env))
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
谢谢你的链接!直到明天,我都不会在幻灯片中测试这些东西,但我一定会回到有效而没有的东西。 – patrickn 2012-02-21 23:53:06
看到我上面的编辑:我在这个问题的智慧结束。我读过的东西似乎反映了我的情况。我得到一个服务器配置错误,当我应该得到幻灯片#8上的权限被拒绝错误。打开目录访问脚本会返回配置错误。我觉得我疯了。 – patrickn 2012-02-22 15:50:08
成功!使用http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango,我注意到他们做了两个sys.path.append命令...一个用于包含django项目的根文件夹,另一个用于实际项目本身(幻灯片使用)...在根文件夹中添加路径解决了问题! – patrickn 2012-02-22 16:09:48