2011-05-04 197 views
1

我正在使用一個使用全堆棧來顯示其所有網頁的框架。這個標準在端口上運行。非常好,但是當投入生產時,服務器似乎阻止了除少數標準端口之外的所有內容。將前端網址重定向到另一個後端網絡服務器

因此,框架(Play框架),建議您在您的前端Web服務器(在我的情況下是Apache2)執行此操作。

文件:play.conf

<VirtualHost *:80> 
    ServerName http://avon.ugent.be 
    CustomLog /var/www/log/proxy-access.log common 
    ErrorLog /var/www/log/proxy-error.log 
    ProxyPreserveHost On 
    DocumentRoot /var/www 
    <Location /dev/app> 
    AuthType Basic 
    AuthName "Test Omgeving" 
    AuthUserFile /var/trac/htpasswd 
    Require valid-user 

    ProxyPass http://127.0.0.1:9000/ 
    ProxyPassReverse http://127.0.0.1:9000/ 
    </Location> 
</VirtualHost> 

這當然需要mod_proxy的模塊,則正在與a2enmod mod_proxy啓用。 (我在Debian發行版上運行)

這個想法是運行兩個web服務器,一個前端和一個後端與應用程序。 重新加載的Apache網絡服務器工作正常,網站啓用和一切,但當我衝浪到http://my.website.com/dev/app網址,它呈現404 ...建議發生了什麼問題?


EDIT3: 10+小時後,試圖把它歸結爲這樣: 我發現調試命令(最後:P),這是輸出:

apache2ctl -S 
VirtualHost configuration: 
wildcard NameVirtualHosts and _default_ servers: 
*:80     is a NameVirtualHost 
     default server avon.ugent.be (/etc/apache2/sites-enabled/000-default:1) 
     port 80 namevhost avon.ugent.be (/etc/apache2/sites-enabled/000-default:1) 
     port 80 namevhost avon.ugent.be (/etc/apache2/sites-enabled/play.conf:1) 
Syntax OK 

這表明虛擬服務器確實被添加到配置中。 但是,它仍然呈現了404。現在,我讀過的某個地方是因爲該路徑中沒有index.html。如果你只是想使用反向代理,這是必要的嗎?

+0

在您的實際配置中,「ServerName」指令是否與您請求的URL匹配?你的例子顯示了'ServerName playtest',在這種情況下,如果你正在訪問'http:// my.website.com/dev/app',應該是'ServerName my.website.com'。 – clmarquart 2011-05-04 12:49:41

+0

感謝您的快速回復。我的印象是servername是arbirtrary,對不起:)我在我的前端文章中編輯過這個文件。它雖然沒有解決問題,但感謝您指出了這一點! – Jasper 2011-05-04 13:00:42

+0

編輯3 ...這讓人非常討厭...感謝迄今爲止的幫助(不嘲諷!),希望隨時獲得解決方案! – Jasper 2011-05-11 13:57:15

回答

2

首先,請嘗試使用Location而不是Directory。目錄用於識別文件系統上的目錄路徑,而不是相對於文檔根目錄的路徑。

<Location '/dev/app'> 
    AuthType Basic 
    AuthName "Test Omgeving" 
    AuthUserFile /var/trac/htpasswd 
    Require valid-user 
</Location> 
+0

謝謝,這確實解決了認證問題,但404仍然存在。 但是已經有很多工作了:) – Jasper 2011-05-04 13:20:40

+0

+1用於捕獲'' – clmarquart 2011-05-04 13:23:24

+1

要確定404來自哪裏(後端代理服務器或apache實例),是否可以在後端停止訪問/錯誤日誌服務器,看看那裏有什麼要求,以及它是否有任何有用的錯誤消息? – 2011-05-04 13:38:59

1

請嘗試以下操作。它應該提示輸入用戶名/密碼,然後將請求傳遞給http://127.0.0.1:9000。就我而言,阿帕奇給人以"Service Temporarily Unvavailable",如果關閉該應用程序的端口9000

<VirtualHost *:80> 
    ServerName my.website.com 

    <Location /dev/app> 
     AuthType Basic 
     AuthName "Test Omgeving" 
     AuthUserFile passwd/.htpasswd 
     Require valid-user 

     ProxyPass http://127.0.0.1:9000 
     ProxyPassReverse http://127.0.0.1:9000 
    </Location> 
</VirtualHost> 

運行。如果你仍然得到一個404,你應該得到的好,你可以確認它不是後端服務器發送它?

+0

很好的答案,謝謝。我仍然得到了404,但是當我執行'lynx http:// localhost:9000'時,這工作正常。所以服務器確實發送每個響應。所以問題出在Apache請求頁面播放之間... – Jasper 2011-05-04 13:53:04

+0

最奇怪的事情...當我執行這個'lynx http://127.0.0.1:9000'時,它一直在等待請求...我在嘗試以查看一些播放配置文件...我會讓你張貼 – Jasper 2011-05-04 14:04:00

+0

但是'lynx 127.0.0.1:9000'的作品... – Jasper 2011-05-04 14:06:27