尝试在Apache后面运行CherryPy时出现403错误

问题描述:

我尝试使用mod_rewrite在CherryPy后面运行CherryPy,如CherryPy文档(BehindApache,ModRewrite)中所述,它不起作用。尝试在Apache后面运行CherryPy时出现403错误

编辑:早些时候,我对这个问题的描述有些不准确。似乎我忘记了在我的一些尝试中重新启动Apache。我已经大大修改了这个问题。

当我运行我的程序(一个非常简单的“hello world”程序,类似于CherryPy自带的第一个教程文件)时,它似乎工作正常。如果我从服务器运行curl "http://127.0.0.1:8080",则可以看到输出,并在CherryPy日志中看到它的某种记录。

但是,如果我尝试从我的浏览器访问网站,则会出现403 Forbidden错误,指出“您无权访问/在此服务器上”。我在CherryPy日志中没有看到它的任何记录。我尝试将RewriteRule(RewriteRule ^(.*) http://127.0.0.1:8080 $1 [proxy])放在我的httpd.conf文件的适当的VirtualHost部分中,无论是否使用斜杠,并且两次都得到相同的错误。在我的Apache的错误日志,我看到这样的台词:

[周一09月27日15时54分11秒2010] [错误] [客户123.45.67.89]试图使mod_rewrite的从远程请求没有启用代理:代理:HTTP://127.0.0.1:8080/

我试图把重写规则在我的网站的.htaccess文件,而是和我有404未找到错误,在我的错误日志中这样的行:

[Mon Sep 27 13:31:54 2010] [error] [client 123.45.67.89]尝试服务目录:proxy:http://127.0.0.1:8080/

我仍然没有在CherryPy日志中看到任何条目。

我决定看看会发生什么,如果我试图访问该网站没有CherryPy运行,我得到了同样的事情。就好像Apache尝试与CherryPy程序通信不成功,如果我将该行放入httpd.conf中,并且在将该行放入.htaccess时完全不知道它。

有没有人在这里知道为什么会发生这种情况,该怎么办?我尝试了所有我能想到的。我的网站运行在Debian 4.3.2-1.1,Apache 2.2.15,Python 2.6.5和CherryPy 3.1.2的DreamHost专用服务器上。

编辑2: lazy1,我试过了你的建议,它没有帮助。我得到相同的403错误。

我在一个非常相似的方式运行的CherryPy背后的Apache。 Apache本身就提供静态内容,任何以'cp'开头的URL都由CherryPy提供服务。 CherryPy正在端口8500上进行监听。在httpd中,这对我有用。CONF:

RewriteMap escape int:escape 
    [...] 
RewriteRule ^/cp\/(.*) http://localhost:8500/cp/${escape:$1} [L,P] 

这是虚拟主机定义中(当然,在RewriteMap指令线之外,但你得到的图片)

显然,你必须确保mod_proxy的是越来越加载。检查RewriteRule documentation以及。

在我CherryPy的配置,我有:

server.socket_host = "127.0.0.1" 
server.socket_port = 8500 

祝你好运!

+0

我试图启用mod_proxy,然后每当我尝试访问我的网站的域上的任何东西,我得到一个500错误。我不知道为什么会发生这种情况。没有任何东西会被添加错误日志。无论如何,我尝试了你的建议,但没有奏效。 – 2010-09-30 18:17:45

+0

是否有任何特定的选项需要在mod_proxy中设置才能正常工作?我不是很熟悉它。 – 2010-09-30 18:23:11

+0

确保你有mod_proxy和mod_proxy_http;看到更多的mod_proxy文档: – 2010-09-30 18:41:43

可能想尝试绑定的CherryPy为0.0.0.0(所有接口)

cherrypy.config.update({"server.socket_host" : "0.0.0.0"})