2016-11-22 113 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” –