确定 Apache 的执行环境

确定 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'

尽管文件 upsells.pkl 似乎具有所有必要的权限,但情况仍然如此:

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

答案1

实际上,您有两个错误。首先是权限错误:

Apache 需要在该文件的每个目录upsells.pkl以及文件本身上具有适当的权限。

尝试以下方法来确定目录具有什么权限(注意空格很重要):

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

Apache 用户将需要x每个目录的权限。 /home通常具有所需的权限,但其中所有内容都/home/*具有模式 750 ( ) 甚至模式 700 (rwx------) 的情况很常见。其中任何一个都会导致您的问题。权限问题也rwxr-x---可能出现在目录中。upsell_backup

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

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

Apache 要么是多线程的,要么会生成多个子进程,这意味着其中任何两个子进程都可以同时接收请求。Apache 在内部使用 RewriteLock 来确保一次只有一个子进程或线程与外部进程通信。如果您不指定一个,程序的输出可能会混合在一起,完全扰乱您的重写规则,甚至可能扰乱您的整个服务器。最可能的结果是,当您的服务器变得繁忙时,您将生成大量500响应。结果可能会更糟。

答案2

暂时禁用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

相关内容