确定Apache的执行环境

我有这个错误:

[Mon Dec 05 10:22:23 2011] [warn] mod_rewrite: Running external rewrite maps without defining a RewriteLock is DANGEROUS! [Mon Dec 05 10:22:23 2011] [error] (13)Permission denied: mod_rewrite: could not start RewriteMap program /etc/httpd/conf.d/upsell_by_id.py 

这个错误是和这行关联的: RewriteMap upsells prg:/etc/httpd/conf.d/upsell_by_id.py

我意识到这可能意味着apache的执行用户不能执行这些文件。 我如何确定apache的执行环境是什么? 如何使这个文件upsell_by_id.py可执行文件到Apache?

 I get this error when I try to run the upsell_by_id.py as apache: Traceback (most recent call last): File "/etc/httpd/conf.d/upsell_by_id.py", line 8, in <module> keyword_groups = pickle.load(open("/home/zumodo/upsell_backup/upsells.pkl", "rb" ) ) IOError: [Errno 13] Permission denied: '/home/zumodo/upsell_backup/upsells.pkl' 

尽pipe文件upsells.pkl似乎具有所有必要的权限

 -rwxrwxrwx. 1 skline skline 6.4M Dec 5 08:50 upsells.pkl 

你其实有两个错误。 权限之一:

Apache将在每个导向upsells.pkl文件的目录以及文件本身中需要适当的权限。

试试这个来确定目录有什么权限(注意空格是重要的):

 ls -ld /home/ /home/zumodo/ /home/zumodo/upsell_backup/ 

Apache用户将需要每个这些目录的x权限。 /home通常具有所需的权限,但在/home/*所有内容都具有mode 750( rwxr-x--- )或甚至是mode 700(rwx ——)的情况非常普遍。 这些都会导致你的问题。 权限问题也可以很容易地在upsell_backup目录中。

upsells.pkl文件移到更合适的path(如/var/www/ )或更改限制目录的权限。

有关RewriteLock的错误消息是正确的; 没有一个是危险的

Apache可能是multithreading的,也可能会产生多个subprocess,这意味着它们中的任何一个都可以同时接收请求。 RewriteLock由Apache在内部使用,以确保一次只有一个subprocess或线程正在与外部进程通信。 如果你不指定一个,程序的输出可能会混在一起,完全搞砸你的重写规则,甚至整个服务器。 最有可能的结果是,当你的服务器变得忙碌时,你将会产生大量的500响应。 显着恶化的结果是可能的。

暂时禁用RewriteMap upsells线,看看Apache是​​否启动。 如果它开始检查用户运行Apache。

运行以下命令。

ps axho user,comm|grep -E "httpd|apache"|uniq|grep -v "root"|awk 'END {print $1}'

这个命令会给你用户运行apache服务器。 然后检查文件的所有权和权限。 我认为这个文件对于运行apache / httpd进程的用户应该是可执行的。

然后通过使用以下命令设置适当的权限和文件的所有权。

chown root.apache /etc/httpd/conf.d/upsell_by_id.py

chmod +x /etc/httpd/conf.d/upsell_by_id.py