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

时间:2010-09-27 20:45:00

标签: python apache cherrypy

我正在尝试使用mod_rewrite在Apache后面运行CherryPy,如CherryPy文档(BehindApacheModRewrite中所述),它无效。

编辑:之前,我对此问题的描述有些不准确。在我的一些尝试中,似乎忘了重启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错误日志中,我看到如下行:

  

[Mon Sep 27 15:54:11 2010] [错误] [客户端123.45.67.89]尝试在未启用代理的情况下从mod_rewrite发出远程请求:proxy:http://127.0.0.1:8080 /

我尝试将RewriteRule放在我网站的.htaccess文件中,并且我的错误日志中出现了404 Not Found错误,其中包含这样的行:

  

[Mon Sep 27 13:31:54 2010] [错误] [客户端123.45.67.89]尝试提供服务目录:proxy:http://127.0.0.1:8080 /

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

我决定看看如果我试图在没有运行CherryPy的情况下访问该网站会发生什么,我也有同样的事情。如果我将该行放在httpd.conf中,并且当我将该行放入.htaccess时完全没有意识到它,就好像Apache尝试与CherryPy程序进行通信失败一样。

有谁在这里知道为什么会这样,以及该怎么办?我已经尝试了我能想到的一切。我的网站使用Debian 4.3.2-1.1,Apache 2.2.15,Python 2.6.5和CherryPy 3.1.2在DreamHost私有服务器上运行。

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

2 个答案:

答案 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 documentation

在我的CherryPy配置中,我有:

server.socket_host = "127.0.0.1"
server.socket_port = 8500
祝你好运!

答案 1 :(得分:0)

可能想尝试将cherrypy绑定到0.0.0.0(所有接口)

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