CentOS 5.7上的mod_wsgi禁止错误
我知道这个问题已经被问过无数次了,但我已经花了很多小时在CentOS 5.7上配置Apache和mod_wsgi,这对我来说是全新的。在Debian(Ubuntu)上我从来没有遇到过这种问题。
我在/etc/httpd/conf.d/
目录下创建了一个wsgi.conf
文件,里面包含了以下内容:
LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /var/xxx/env
/var/xxx/env
是项目的虚拟环境。
然后我在/etc/httpd/conf.d/ssl.conf
中添加了以下内容(是的,我需要它来支持https,但我也尝试把它放在普通的虚拟主机中)。
WSGIScriptAlias /suburl /var/xxx/yyy/hello.wsgi
<Location /suburl>
Order deny,allow
Allow from all
</Location>
hello.wsgi
的内容是
def application(environ, start_response):
status = '200 OK'
output = 'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
这是ls -l /var/xxx/
的输出结果
total 16
drwxr-xr-x 5 apache apache 4096 Feb 9 05:14 env
drwxr-xr-x 7 apache apache 4096 Feb 9 05:41 yyy
还有ls -l /var/xxx/yyy/
的输出结果
total ...
...
-rwxr-xr-x 1 apache apache 238 Feb 9 05:19 hello.wsgi
...
ps -Af | grep httpd
显示了
root 8872 1 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8874 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8875 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8876 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8877 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8878 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8879 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8880 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
apache 8881 8872 0 07:06 ? 00:00:00 /usr/sbin/httpd
fedor 10609 4716 0 07:16 pts/1 00:00:00 grep httpd
/var/log/httpd/ssl_error_log
里充满了类似以下的行
[Thu Feb 09 07:06:47 2012] [error] [client 127.0.0.1] (13)Permission denied: access to /suburl denied
但是当我通过调用sudo /usr/sbin/httpd
来启动Apache时,hello.wsgi
就开始工作了,尽管ps -Af | grep httpd
显示的行非常相似:
root 11442 1 3 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11443 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11444 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11445 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11446 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11447 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11448 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11449 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
apache 11450 11442 0 07:21 ? 00:00:00 /usr/sbin/httpd
fedor 11453 4716 0 07:21 pts/1 00:00:00 grep httpd
有没有人知道可能导致这个问题的原因,以及我还需要检查什么?
1 个回答
2
给文件和文件夹设置合适的SELinux文件上下文。想了解更多细节,可以查看httpd_selinux(8)
的手册。