Django Apache Redhat权限被拒绝,对fopen()的调用失败

2024-10-01 11:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

/var/log/httpd/error_log说

[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你说

^{pr2}$

我还有一个/etc/httpd/sites enabled/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()

这是我第一次尝试在Redhat上启动Django。任何帮助都将不胜感激。在


Tags: djangopyimportprojectwsgiapplicationvarwww
2条回答

Appache通常以httpd用户的身份运行。我将确保此用户至少对该目录具有读取权限。您可以尝试:

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

我最初的问题是Selinux。我转到/etc/selinux/config并更改了文件,以便

SELINUX=允许

以前,我的档案上说

SELINUX=强制

此更改消除了权限错误。在

从那里我有其他错误,要么无法导入网站,要么无法导入django.core.wsgi. 在

我转到Django文档https://docs.djangoproject.com/en/1.10/howto/deployment/wsgi/modwsgi/,添加了一个virtualenv,并在守护程序模式下使用mod_gwsgi。在

我遇到的总体问题是使用python2的apache。我会收到一条很小的消息,告诉我正在跳过加载mod\wsgi

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

结果发现我在机器上安装了mod_wsgi(Python2的版本)。我删除了这个,在运行服务httpd start时,我得到了错误

^{pr2}$

结果发现mod鋋wsgi没有加载。好吧,我忘了用新的virtualenv位置来制作python3的mod_wsgi。在

我使用这些指令让mod帴wsgi在Redhat上使用python3

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/

但这一次我在我的虚拟世界里使用了我通往Python3的道路。我还安装了我的pip软件包

pip install -I <name>

“。”。我将在虚拟环境中安装包(而不是使用全局站点包)。在

这是my/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>

然后在my/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公司你做的文件。如您所见,我还有一个sites enabled/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>

相关问题 更多 >