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

3 投票
2 回答
1693 浏览
提问于 2025-04-16 04:40

我正在尝试在Apache服务器上使用mod_rewrite来运行CherryPy,具体方法可以参考CherryPy的文档(BehindApache, ModRewrite),但目前没有成功。

补充:之前我对这个问题的描述有点不准确。看起来我在尝试的过程中忘记重启Apache了。我对问题进行了大幅修改。

当我运行我的程序(一个非常简单的“你好,世界”程序,类似于CherryPy自带的第一个教程文件)时,似乎一切正常。如果我在服务器上运行 curl "http://127.0.0.1:8080",我可以看到输出,并且在CherryPy的日志中也能找到一些记录。

但是,如果我尝试通过浏览器访问这个网站,就会出现403禁止访问的错误,提示“你没有权限访问这个服务器上的/”。在CherryPy的日志中没有看到任何记录。我尝试将RewriteRule(RewriteRule ^(.*) http://127.0.0.1:8080$1 [proxy])放在httpd.conf文件的合适的VirtualHost部分,无论是否加斜杠,结果都是同样的错误。在我的Apache错误日志中,看到这样的行:

[Mon Sep 27 15:54:11 2010] [error] [client 123.45.67.89] 尝试从未启用代理的mod_rewrite进行远程请求: proxy:http://127.0.0.1:8080/

我尝试将RewriteRule放在我网站的.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在httpd.conf中尝试与CherryPy程序通信时失败了,而在.htaccess中则完全没有意识到它的存在。

这里有没有人知道为什么会这样,以及该怎么解决?我已经尝试了我能想到的所有方法。我的网站运行在DreamHost的私人服务器上,系统是Debian 4.3.2-1.1,Apache 2.2.15,Python 2.6.5,以及CherryPy 3.1.2。

补充 2:lazy1,我试了你的建议,但没有帮助。我仍然遇到同样的403错误。

2 个回答

0

你可能想把cherrypy绑定到0.0.0.0,这样就可以在所有网络接口上使用了。

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

我在Apache后面运行CherryPy,方式非常相似。Apache自己处理静态内容,而任何以'cp'开头的URL都是由CherryPy来处理。CherryPy监听8500端口。以下是我在httpd.conf中使用的配置:

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

这段配置是在VirtualHost定义里面的(不过RewriteMap那一行是在外面的,但你大概明白我的意思)。

显然,你得确保mod_proxy这个模块被加载。也可以查看一下RewriteRule的文档

在我的CherryPy配置中,我有:

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

祝你好运!

撰写回答