2016-11-22 115 views
0

/無功/日誌/的httpd/error_log中說,Django的阿帕奇紅帽拒絕權限,調用fopen()函數失敗

[Tue Nov 22 12:54:51.763863 2016] [mime_magic:error] AH01512: mod_mime_magic: can't read /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py', referer: http://ipaddress/Live 
[Tue Nov 22 12:54:51.763953 2016] [mime_magic:error] AH01512: mod_mime_magic: can't read /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py', referer: http://ipaddress/Live 
[Tue Nov 22 12:54:51.771547 2016] [:error] (13)Permission denied: client ######## mod_wsgi (pid=39821, process='', application='omadi-trafcbi01.intranet.hdr|'): Call to fopen() failed for '/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py'., referer: http://ipaddress/Live 

我把我的項目,我的主文件夾到/ var/WWW /企圖修復許可問題(無濟於事)。

這裏是我已經添加了什麼/etc/httpd/conf/httpd.conf中,

WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
WSGIPythonPath /bin/python3/site-packages:/var/www/Django_Project/cbtraffic/cbTraffic 
<Directory /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

我也有一個的/ etc/httpd的/啓用的站點 -/000-默認文件,

<VirtualHost *:80> 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
    <Directory "/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic"> 
     Require all granted 
    </Directory> 
    WSGIDaemonProcess cbTraffic python-path=/var/www/Django_Project:/bin/python3/site-packages 
    WSGIProcessGroup cbTraffic 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
</VirtualHost> 

這裏是我的wsgi.py文件,

import os 
import sys 
import site 
sys.path.append("/var/www/Django_Project/cbtraffic/cbTraffic") 
sys.path.append("/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py") 
from django.core.wsgi import get_wsgi_application 
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cbTraffic.settings") 
application = get_wsgi_application() 

這是我第一次嘗試推出的Django在Redhat。任何幫助,將不勝感激。

+1

不相關,但不需要任何Python模塊搜索路徑選項中的'/ bin/python3/site-packages'。你甚至不需要''httpd.conf''中的任何東西,只要你修正''WSGIDaemonProcess''的''python-path''到正確路徑'/ var/www/Django_Project/cbtraffic/cbTraffic''。而且你也不需要''wsgi.py''文件中的''sys.path''。在默認站點的''Directory''塊中使用''''文件可以使安全性訪問更具體,但是沒有工作。 –

回答

0

我最初的問題是與Selinux。我去到/ etc/SELinux的/ config並改變了文件,以便

SELINUX =許可

之前,我的文件曾表示

SELINUX =執行

這種變化擺脫了許可錯誤。

從那裏我有無法導入網站,或無法導入django.core.wsgi其他錯誤。

我去了Django文檔https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/,並添加了virtualenv,並在後臺程序模式下使用了mod_wsgi。

我是有整體問題是與使用Python 2阿帕奇我會得到一個微小的消息告訴我,裝載mod_wsgi的是被跳過,

"AH01574: module wsgi_module is already loaded, skipping". 

事實證明,我的mod_wsgi(版本蟒蛇2)安裝在機器上。我刪除了這一點,並在運行服務的httpd開始我得到了錯誤,

"httpd: Syntax error on line 379 of /etc/httpd/conf/httpd.conf: Cannot load /etc/httpd/modules/mod_wsgi.so into server: /etc/httpd/modules/mod_wsgi.so: cannot open shared o...file or directory" 

事實證明,該mod_wsgi的未加載。那麼,我忘了使用新的virtualenv位置爲python 3製作mod_wsgi。

我用這些指令用於獲取的mod_wsgi在Redhat

https://code.google.com/p/modwsgi/wiki/DownloadTheSoftware

cd /usr/local/src 
sudo wget https://modwsgi.googlecode.com/files/mod_wsgi-3.4.tar.gz 
sudo tar -zxvf mod_wsgi-3.4.tar.gz 
cd mod_wsgi-3.4/ 
sudo ./configure --with-python=/usr/bin/python3.3 
sudo make 
sudo make install 
mod_wsgi.so is placed in /usr/lib/apache2/modules/ 

與Python 3工作,但這次我用我的路我的virtualenv內python3。我也在安裝我的pip軟件包,「

pip install -I <name> 

」。 -I將在您的虛擬環境中安裝軟件包(而不是使用全球站點軟件包)。

這裏是我的/etc/httpd/conf/httpd.conf中文件的主要部分:

WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py process-group=example.com 


WSGIDaemonProcess example.com python-path=/var/www/Django_Project/cbtraffic/cbTraffic:/usr/lib/python3.4/site-packages/cbenv/lib/python3.4/site-packages 
WSGIProcessGroup example.com 


<Directory /var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic> 
<Files wsgi.py> 
Require all granted 
</Files> 
</Directory> 

然後在我的/etc/httpd/conf/httpd.conf中文件的底部:

LoadModule wsgi_module /etc/httpd/modules/mod_wsgi.so 
Include /etc/httpd/sites-enabled/000-default 
IncludeOptional conf.d/*.conf 

這會加載您所做的mod_wsgi.so文件。正如你所看到的,我也有一個網站啓用/ 000默認文件。以下是這些內容:

<VirtualHost *:80> 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 
    <Directory "/var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic"> 
     Require all granted 
    </Directory> 


WSGIDaemonProcess cbTraffic python-path=/var/www/Django_Project:/usr/lib/python3.4/site-packages/cbenv/lib/python3.4/site-packages 
    WSGIProcessGroup cbTraffic 
    WSGIScriptAlias//var/www/Django_Project/cbtraffic/cbTraffic/cbTraffic/wsgi.py 




</VirtualHost> 
+0

請勿使用任何與Google Code網站相關的內容mod_wsgi的。這是Google不會讓你刪除的舊文檔。最新的mod_wsgi版本在這個時候是4.5.7。 3.4更新。不要使用3.4。另請參閱更多有關如何在http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html設置Python虛擬環境的最新文檔,您不應該使用「site-packages」在''python-path''中設置Python虛擬環境。 –

1

Appache通常會作爲httpd用戶運行。我會確保該用戶至少具有該目錄的讀取權限。你可能想嘗試:

chown -R httpd:httpd /var/www/Django_Project/  
+0

我不確定組/用戶是什麼,因爲chown -R httpd:httpd/var/www/Django_Project /給了我錯誤'invalid user'。我用find/-name httpd.conf | xargs grep -i「^ user」找到用戶並找到 find/-name httpd.conf | xargs grep -i「^ group」獲取組。命令chown -R apache:apache/var/www/Django_Project /成功,但我仍然收到相同的權限問題。 –

+0

/var/www上有什麼權限? – 2ps

+0

我改變的/ etc/selinux的/配置以便SELINUX =許可和跑 /SYS/FS/selinux的/ envorce經由 「回聲0>/SYS/FS/selinux的/執行」 這使得先前的錯誤消失!我現在收到錯誤「No module named django.core.wsgi」,其中的錯誤發生在我的wsgi.py文件的行上「from django.core.wsgi import get_wsgi_application」 –