当我尝试在http://www.satoshi.example.com/mysite访问我的Django网站时,我得到503 Service Temporary Unavailable
。
Apache错误日志说
[Tue Feb 28 07:11:09 2012] [error] [client 10.0.0.202] (13)Permission denied: mod_wsgi (pid=4756): Unable to connect to WSGI daemon process 'django' on '/etc/httpd/logs/wsgi.17555.4.1.sock' after multiple attempts.
Apache正确加载mod_wsgi
root@satoshi:~/html/mysite# apachectl -M | grep wsgi
wsgi_module (shared)
Syntax OK
Apache加载/var/www/html/mysite/apache/apache_django_wsgi.conf
WSGIDaemonProcess django
WSGIProcessGroup django
<Directory "/var/www/html/mysite">
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
</Directory>
WSGIScriptAlias /mysite "/var/www/html/mysite/apache/django.wsgi"
<Directory "/var/www/html/mysite/apache">
Order deny,allow
Allow from all
</Directory>
这是/var/www/html/mysite/apache/django.wsgi
import os
import sys
paths = [ '/var/www/html/mysite',
'/usr/lib/python2.6/site-packages/',
]
for path in paths:
if path not in sys.path:
sys.path.append(path)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
奇怪的是,我发现自己甚至不需要LoadModule wsgi_module modules/mod_wsgi.so
httpd.conf
。我认为我的httpd.conf
是已加载mod_wsgi
的另一个配置的扩展。不确定这是否重要。
到目前为止我提供的内容有什么问题吗?如果您需要更多信息,请与我们联系。提前谢谢!
=============================================== ==
@jpic要求的信息
root@satoshi:/var/www/html# ps aux | grep apache
root 4564 0.0 0.2 207636 5432 pts/9 S+ 04:16 0:00 vi apache_django_wsgi.conf
apache 6006 0.0 0.7 365140 14820 ? S 09:53 0:00 /usr/sbin/httpd
apache 6007 0.0 0.7 365140 14884 ? S 09:53 0:00 /usr/sbin/httpd
apache 6008 0.0 0.7 365140 14888 ? S 09:53 0:00 /usr/sbin/httpd
apache 6009 0.0 0.7 365140 14884 ? S 09:53 0:00 /usr/sbin/httpd
apache 6010 0.0 0.7 365008 14784 ? S 09:53 0:00 /usr/sbin/httpd
apache 6011 0.0 0.7 365008 14768 ? S 09:53 0:00 /usr/sbin/httpd
apache 6012 0.0 0.7 365008 14748 ? S 09:53 0:00 /usr/sbin/httpd
apache 6013 0.0 0.7 365140 14876 ? S 09:53 0:00 /usr/sbin/httpd
apache 6112 0.0 0.7 365008 14756 ? S 10:05 0:00 /usr/sbin/httpd
root 6116 0.0 0.2 207700 5492 pts/15 S+ 10:06 0:00 vi ../apache/django.wsgi
apache 6181 0.0 1.5 713972 32136 ? Sl 10:08 0:00 /usr/sbin/httpd
root 8173 0.0 0.0 103300 848 pts/17 S+ 23:39 0:00 grep --color=auto apache
用户信息(您的意思是id
?userid
未找到)
root@satoshi:/var/www/html# id apache
uid=48(apache) gid=48(apache) groups=48(apache)
ls -la
信息
root@satoshi:/var/www/html# ls -la /etc/ | grep httpd
drwxrwxr-x. 4 root 4.0K Feb 16 18:27 httpd/
root@satoshi:/var/www/html# ls -la /etc/httpd/
total 24K
drwxrwxr-x. 4 root 4.0K Feb 16 18:27 ./
drwxr-xr-x. 128 root 12K Feb 28 03:45 ../
drwxr-xr-x. 2 root 4.0K Feb 28 08:07 conf/
drwxr-xr-x. 2 root 4.0K Feb 16 18:28 conf.d/
lrwxrwxrwx 1 root 19 Feb 16 18:27 logs -> ../../var/log/httpd/
lrwxrwxrwx 1 root 29 Feb 16 18:27 modules -> ../../usr/lib64/httpd/modules/
lrwxrwxrwx 1 root 19 Feb 16 18:27 run -> ../../var/run/httpd/
root@satoshi:/var/www/html# ls -la /etc/httpd/logs/
total 528K
drwxrwxr-x. 2 root 4.0K Feb 28 09:53 ./
drwxr-xr-x. 19 root 4.0K Feb 27 06:51 ../
-rw-r--r-- 1 root 17K Feb 28 10:08 access_log
-rw-r--r-- 1 root 351 Feb 3 10:24 access_log-20120205
-rw-r--r-- 1 root 1.8K Feb 7 01:39 access_log-20120212
-rw-r--r-- 1 root 278K Feb 18 23:17 access_log-20120219
-rw-r--r-- 1 root 85K Feb 22 08:38 access_log-20120226
-rw-r--r-- 1 root 50K Feb 28 10:08 error_log
-rw-r--r-- 1 root 14K Feb 5 03:28 error_log-20120205
-rw-r--r-- 1 root 2.2K Feb 12 03:14 error_log-20120212
-rw-r--r-- 1 root 9.4K Feb 19 03:28 error_log-20120219
-rw-r--r-- 1 root 4.0K Feb 26 03:20 error_log-20120226
-rw-r--r--. 1 root 0 Oct 14 15:14 ssl_access_log
-rw-r--r-- 1 root 3.1K Feb 28 09:53 ssl_error_log
-rw-r--r-- 1 root 1.4K Feb 3 03:25 ssl_error_log-20120205
-rw-r--r-- 1 root 237 Feb 5 03:28 ssl_error_log-20120212
-rw-r--r-- 1 root 1.2K Feb 17 01:52 ssl_error_log-20120219
-rw-r--r-- 1 root 237 Feb 19 03:28 ssl_error_log-20120226
-rw-r--r--. 1 root 0 Oct 14 15:14 ssl_request_log
srw-rw-rw- 1 apache 0 Feb 28 09:53 wsgi.17555.14.1.sock
答案 0 :(得分:9)
此问题记录在:
http://code.google.com/p/modwsgi/wiki/ConfigurationIssues#Location_Of_UNIX_Sockets
其他人提供的更改权限的解决方案是错误的。
正确的解决方案是将套接字文件保存到Apache用户可以读取的位置。
在保护日志目录的系统上,他们有时会有一个系统来在你弄乱它们时设置这些权限。因此,任何改变都可能只是暂时的。
答案 1 :(得分:2)
我写了这个脚本来处理apache2-mpm-itk上的wsgi socket权限问题
#!/bin/sh
# This script will fix apache wsgi socket permissions
# By default use standard socket location /var/run/apache2/wsgi
#
# You have to add this script after success execute of start|restart|reload
# commands in next files:
# /usr/sbin/apache2ctrl
# /etc/init.d/apache2
WSGISocketPrefix="/var/run/apache2/wsgi"
if [ "$(id -u)" != "0" ]; then
echo "This script must be run as root" 1>&2
exit 1
fi
echo "Wait for other processes to start"
sleep 1
echo "Change wsgi socket permissions"
chmod 0766 ${WSGISocketPrefix}.*
答案 2 :(得分:0)
运行apache进程的用户似乎没有从指定位置读/写的权限。
通常通过在VirtualHost conf中设置WSGIDaemonProcess
和WSGIProcessGroup
指令来解决这个问题。
WSGIDaemonProcess process-name user=user group=group threads=10 python-path=vitrual-env-path
WSGIProcessGroup process-group
您也可以(除非没有任何其他权限/组问题。)只需将相关的路径读/写访问权限添加到运行apache进程的用户。
chmod [apache-user]+rw /etc/httpd/logs/