Django + Apache + mod_wsgi权限被拒绝

问题描述:

我完成了Django网站上有关使用mod_wsgihere)的教程,并且在适当的情况下替换了我的路径,导致胖子“权限被拒绝”。当我尝试访问/时。这是我加入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,服务器将返回配置错误,尽管它是在幻灯片中配置的。

+0

谢谢你的链接!直到明天,我都不会在幻灯片中测试这些东西,但我一定会回到有效而没有的东西。 – patrickn 2012-02-21 23:53:06

+0

看到我上面的编辑:我在这个问题的智慧结束。我读过的东西似乎反映了我的情况。我得到一个服务器配置错误,当我应该得到幻灯片#8上的权限被拒绝错误。打开目录访问脚本会返回配置错误。我觉得我疯了。 – patrickn 2012-02-22 15:50:08

+1

成功!使用http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango,我注意到他们做了两个sys.path.append命令...一个用于包含django项目的根文件夹,另一个用于实际项目本身(幻灯片使用)...在根文件夹中添加路径解决了问题! – patrickn 2012-02-22 16:09:48

同样的配置,同样的环境......但一切工作,除了在我的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 
+3

这也是我的问题的原因。我不得不关闭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()