2010-09-27 145 views
3

我嘗試使用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錯誤。

回答

4

我在一個非常相似的方式運行的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

0

可能想嘗試綁定的CherryPy爲0.0.0.0(所有接口)

cherrypy.config.update({"server.socket_host" : "0.0.0.0"}) 
相關問題