2012-02-21 427 views
3

我完成了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,服務器將返回配置錯誤,儘管它是在幻燈片中配置的。

回答

6
+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

14

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

4

我有同樣的問題,有時這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()