Django Apache Redhat 权限被拒绝,调用 fopen() 失败
Django Apache Redhat Permission denied, call to fopen() failed
/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,
的内容
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/sites-enabled/000-default文件,
<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。任何帮助将不胜感激。
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_wsgi。
我遇到的总体问题是使用 Python 2 的 apache。我会收到一条小消息,告诉我正在跳过加载 mod_wsgi,
"AH01574: module wsgi_module is already loaded, skipping".
原来我在机器上安装了 mod_wsgi(python 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
上与 Python 3 一起工作
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/
但是这次我在我的 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 文件。如您所见,我还有一个 sites-enabled/000-default 文件。以下是这些内容:
<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>
/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,
的内容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/sites-enabled/000-default文件,
<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。任何帮助将不胜感激。
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_wsgi。
我遇到的总体问题是使用 Python 2 的 apache。我会收到一条小消息,告诉我正在跳过加载 mod_wsgi,
"AH01574: module wsgi_module is already loaded, skipping".
原来我在机器上安装了 mod_wsgi(python 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
上与 Python 3 一起工作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/
但是这次我在我的 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 文件。如您所见,我还有一个 sites-enabled/000-default 文件。以下是这些内容:
<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>