同一个 java web 应用程序的 url 重定向/映射到多个子域

问题描述:

我有一个域,比如 www.domain.com.我开发了一个 java web 应用程序,比如 jwa.现在我想使用子域为不同的客户端安装相同的应用程序,可能的最佳解决方案是什么?

I've a domain, say www.domain.com. And I've developed a java web application, say jwa. Now I want to install the same app for different clients using subdomains, what is the best solution possible?

client1.domain.com"之类的东西指向client1"(重命名为 jwa)

something like "client1.domain.com" points to "client1" (renamed jwa)

我知道我们可以获取 client1.domain.com/client1/但两次 client1 并不好.或者至少我们可以在没有多个 tomcat 实例的情况下获得 client1.domain.com/jwa/吗?顺便说一句,我在同一台服务器上运行 apache http 服务器,并为 java/tomcat 应用程序使用proxy_module"

I know we can get client1.domain.com/client1/ but client1 twice isn't good. or at least Can we get client1.domain.com/jwa/, without have multiple tomcat instances? btw, I'm running apache http server on the same server and using "proxy_module" for java/tomcat apps

问候

您不需要多个 Tomcat 实例 - 您可以将多个客户端指向多个子域以使用同一个 Web 应用程序

You dont need multiple Tomcat instances - you can point multiple clients across multiple subdomains to use the same web app

但请确保这适合您的业务用例 - 即您是否确实希望运行多个 web 应用程序实例,或者一个可以为所有客户服务的单个实例.

BUT be sure that this fits with your business use case - i.e. do you actually want multiple instances of the webapp running, or a can single instance serve all your clients.

我指的是品牌/徽标/共享数据/外观等 - 所有客户都这样吗?

I'm referring to the branding/logo/shared data/look-and-feel etc - is that common across all clients?

让我们假设它是.

配置 Apache 后,正确的方法是使用 VirtualHost 指令和 mod_proxy.

With an Apache configured, the right way is to use VirtualHost directives along with mod_proxy.

Apache 端这样的配置应该可以工作 - 每个子域创建一个,并将 ProxyPassProxyPassReverse 指向 Tomcat Web 应用程序

A configuration like this on the Apache side should work - create one per subdomain, and point the ProxyPass and ProxyPassReverse to the Tomcat web app

<VirtualHost *:80>
  ServerName client1.domain.com

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  ProxyPass /jwa http://client1.domain.com:8080/jwa
  ProxyPassReverse /jwa http://client1.domain.com:8080/jwa
</VirtualHost>

相关阅读

Apache 文档 有很多 VirtualHost 配置示例

还有一个没有 Apache httpd 的解决方案,您可以在 Tomcat server.xml 中配置 Host 整体,但 Apache 是管理域 URL 的更好地方

There is also a solution without Apache httpd, you can configure Host entires within Tomcat server.xml but Apache is a better place to manage your domain URLs