将前端URL重定向到另一个后端Web服务器

时间:2011-05-04 12:44:10

标签: apache apache2 webserver playframework

我正在使用一个使用全栈来显示其所有网页的框架。这在端口 9000 上运行标准。非常好,但在投入生产时,服务器似乎阻止除了几个标准端口之外的所有东西。

因此,框架(Play框架)建议您在前端Web服务器(在我的案例中为Apache2)中执行此操作。

file: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>

这当然需要使用a2enmod mod_proxy启用的 mod_proxy 模块。 (我在Debian发行版上运行它)

这个想法是运行两个Web服务器,一个是前端,一个是后端。 apache webserver的重新加载工作正常,网站启用了所有内容,但是当我浏览到http://my.website.com/dev/app网址时,它会呈现404 ...建议出了什么问题?


EDIT3: 经过10多个小时的尝试,归结为: 我找到了debugging命令(最后: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。如果你只想使用反向代理,这是必要的吗?

2 个答案:

答案 0 :(得分:2)

首先,请尝试使用Location代替Directory。目录用于标识文件系统上的目录路径,而不是相对于文档根目录的路径。

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

答案 1 :(得分:1)

尝试以下方法。它应该提示输入用户名/密码,然后将请求传递给http://127.0.0.1:9000。在我的例子中,Apache提供了一个"Service Temporarily Unvavailable",如果你关闭在端口9000上运行的应用程序,你应该得到它{/ 1}

<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,你能否确认它不是发送它的后端服务器?