2011-05-04 196 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