具有Apache mod_proxy且没有上下文名称的Jetty应用程序的子域

时间:2013-10-29 10:35:12

标签: java apache jetty mod-proxy

这个问题has been asked before,在简历中我想配置这个场景:

1 - 我有一台带有许多应用程序的Jetty 7服务器,例如:app1,app2,app3等。

2 - 我有一个主域名,每个Jetty应用程序有一个子域名,例如: app1.example.com,app2.example.com,app3.example.com等。

3 - 我尝试使用Apache 2.2.22 mod_proxy来跨Apache管理的域中屏蔽这些Jetty应用程序。这是我的一个应用程序的功能配置:

<VirtualHost *:80>
        ServerName example.com
        ServerAlias app1.example.com
        ProxyRequests Off
        ProxyPreserveHost On

        <Proxy *:80>
          Order deny,allow
          Allow from all
        </Proxy>
        ProxyPass /app1 http://localhost:8080/app1
</VirtualHost>

此配置有效,但是,它不会删除上下文名称,URI为:

  

http://app1.example.com/app1/?args=or/pages/etc ...

有办法删除此上下文名称,留下完全透明的URI吗? e.g:

  

http://app1.example.com/?args=or/pages/etc ..

网络上的所有示例都在URIS上使用此上下文名称:/

其他信息:

  • 使用Ubuntu 12.04的VM;
  • Jetty 7未经修改;
  • 启用了mod_proxy和mod_rewrite的Apache 2.2.22(默认情况下启用了一些基本的mod);
  • 在Digital Ocean的VM管理器中更正有效的CNAME和域名;

提前致谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案:

1 - 为apache2 mod-proxy-html安装此特定的lib:

sudo apt-get install libapache2-lib-proxy-html

2 - 启用此新模块:

sudo a2enmod proxy_html

3 - 在以下位置配置您的应用程序描述符:

sudo vim /etc/apache2/sites-enabled/app1 

有了这个内容:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName app1.example.com
        ProxyRequests Off
        ProxyPreserveHost On

        <Proxy *:80>
          Order deny,allow
          Allow from all
        </Proxy>
        ProxyPass / http://localhost:8080/app1
        ProxyPassReverse / http://localhost:8080/app1

        ProxyHTMLURLMap / /app1/

        <Location />
                Order allow,deny
                Allow from all
        </Location>
</VirtualHost>

4 - 重启apache2服务:

sudo service apache2 restart

快乐,透明的请求:

  

http://app1.example.com/some/beautiful/page