【问题标题】:Apache Python 500 internal server errorApache Python 500 内部服务器错误
【发布时间】:2015-11-22 02:52:31
【问题描述】:

提前感谢您对此提供的任何帮助,我是一个新手,并且一直在到处寻找我做错了什么。

我有 Apache 2.4.6,python 2.7 centos 7。

我有一个简单的 python 脚本

/var/www/html/test.py

在它的脚本中

#!/usr/bin/env python
print 'Hello World!'

权限已检查(777只是因为我想不通):

-rwxrwxrwx.  1 apache apache   192 Aug 27 11:45 test.py

运行命令

/var/www/html/test.py

作品查找并显示 Hello World!

apache 的日志说

[Thu Aug 27 11:38:53.703606 2015] [cgi:error] [pid 10218] [client 86.159.50.246:61086] AH01215: (13)Permission denied: exec of '/var/www/html/test.py' failed

相关apache配置如下:

LoadModule wsgi_module modules/mod_wsgi.so
<Directory /var/www/html/>
 Order allow,deny
 Require all granted
 allow from all
 Options +ExecCGI
 AddHandler cgi-script .py
</Directory>

任何帮助将不胜感激,因为我不知道我做错了什么!

【问题讨论】:

  • 你启用了 SELinux 吗?
  • 已启用。不幸的是,当我禁用它并重新启动服务器时,我失去了连接它的能力,因为它是亚马逊服务器。所以我现在正试图在家庭虚拟机上重建整个东西......
  • 好的,我已经建立了一个全新的服务器,一切都是新鲜的,一切都一样接受我使用单独的默认 cgi-bin 目录,所以 /var/www/cgi-bin/test.py 和 AllowOverride None 要求所有授予的选项 +ExecCGI AddHandler cgi-script .py 和脚本别名匹配。 se linux 被禁用,我得到同样的错误!!!
  • 是的,因为您正在编写 CGI 脚本,所以 mod_wsgi 与它无关。不过,您确实应该远离使用 CGI 脚本。如果想认真编写 Python Web 应用程序,请从学习 Flask 开始,当您了解开发服务器的基础知识后,才考虑使用 mod_wsgi 部署到 Apache。

标签: python apache python-2.7 mod-wsgi permission-denied


【解决方案1】:

我终于弄清楚了这个问题。那是我用 yum 安装了 mod_wsgi,它对于不同版本的 python 是预先编译好的。它适用于 SE linux 禁用。为了解决这个问题,我运行了以下代码行

yum install httpd-devel
git clone https://github.com/GrahamDumpleton/mod_wsgi.git
cd mod_wsgi
./configure --with-python=/usr/bin/python2.7    
make
make install

然后输出模块(.so)文件的路径。它看起来不错,但为了完整起见,我更改了文件: /etc/httpd/conf.modules.d/10-wsgi.conf

来自

LoadModule wsgi_module modules/mod_wsgi.so

LoadModule wsgi_module /usr/lib64/httpd/modules/mod_wsgi.so

因为那是 make 步骤的输出路径并且它起作用了!!

【讨论】:

  • + yum install python-devel