Django的阿帕奇红帽拒绝权限,调用fopen()函数失败
/无功/日志/的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。任何帮助,将不胜感激。
我最初的问题是与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>
请勿使用任何与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虚拟环境。 –
Appache通常会作为httpd
用户运行。我会确保该用户至少具有该目录的读取权限。你可能想尝试:
chown -R httpd:httpd /var/www/Django_Project/
我不确定组/用户是什么,因为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 /成功,但我仍然收到相同的权限问题。 –
/var/www上有什么权限? – 2ps
我改变的/ 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” –
不相关,但不需要任何Python模块搜索路径选项中的'/ bin/python3/site-packages'。你甚至不需要''httpd.conf''中的任何东西,只要你修正''WSGIDaemonProcess''的''python-path''到正确路径'/ var/www/Django_Project/cbtraffic/cbTraffic''。而且你也不需要''wsgi.py''文件中的''sys.path''。在默认站点的''Directory''块中使用''''文件可以使安全性访问更具体,但是没有工作。 –