我是一名Web应用程序开发人员,只是一名初学者。 我正在设计一个小的J2EE Web应用程序(例如,服务名称就像 http://www.example.com)。它使用Apache Tomcat。 规范:当用户注册Web应用程序时,他将获得一个自定义域名
如何在我的Web应用程序中完成此操作。我还在开发应用程序。我还没有托管它。
我是一名Web应用程序开发人员,只是一名初学者。 我正在设计一个小的J2EE Web应用程序(例如,服务名称就像 http://www.example.com)。它使用Apache Tomcat。 规范:当用户注册Web应用程序时,他将获得一个自定义域名
如何在我的Web应用程序中完成此操作。我还在开发应用程序。我还没有托管它。
您需要为Apache配置中的每个子域创建一个虚拟主机,如:
<VirtualHost *:80>
ServerAdmin webmaster@subdomain1.example.com
DocumentRoot /www/subdomain1.example.com
ServerName subdomain1.example.com
ErrorLog logs / subdomain1.example.com-host.example.com-error_log
CustomLog logs / subdomain1.example.com-access_log common
</虚拟主机>
但是有一个问题。如果您的解决方案需要创建文件夹,虚拟主机添加和apache重新启动,这对我来说不太好。我该如何处理这个问题是:
如果您使用这种方式,您只需要设置上面一次,然后将子域添加到存储中,这似乎是比创建子文件夹和修改Apache配置更灵活的解决方案。
你有两个问题。
首先,您需要让用户的浏览器识别“username.mysite.com”所在的位置。这需要DNS配置,通常采用“CNAME通配符”的形式。请注意,如果您想在试用阶段自己控制,dyndns.org会在其动态DNS专业版程序包中提供此功能。
第二个是你需要告诉Tomcat从主机名派生用户,并为每个用户提供一个特殊的站点。最简单的方法是,最有可能的方法是在URL中的主机名上设置一个“品味”的servlet过滤器,并设置jsp页面所需的属性。
如果您在Windows上,请编辑\ windows \ system32 \ drivers \ etc \ hosts文件并添加如下所示的行:
127.0.0.1 username.mysite.com
然后当服务器运行时,您可以打开浏览器并键入:
http://username.mysite.com
http://username.mysite.com:8080
或者其他什么,看看网站。
你需要管理员权限。
如果您使用的是Linux,则需要编辑/ etc / hosts,并执行相同的操作。
但是,在部署时,更多的是配置Web服务器和DNS服务器。因此,如果您想获得完整的体验,则应在本地安装dns服务器并将其用作网络名称服务器。这是一个更复杂的任务,说明取决于您是在Linux还是Windows,以及您正在使用的Web服务器。
然后你必须在应用程序中编写一些代码来检查服务器变量以找出使用了哪个子域,并根据它进行处理。
看起来您正在寻找Tomcat上的虚拟主机。然后需要在Tomcat中配置子域:
http://tomcat.apache.org/tomcat-6.0-doc/virtual-hosting-howto.html
Web应用程序仅控制从上下文根开始的URL部分。因此,如果“www.mysite.com/”上有一个网络应用程序,它可以处理“www.mysite.com/alice”或“www.mysite.com/bob”的请求,但它不会处理“alice”的请求.mysite.com /“如果尚未在Tomcat服务器中配置。这意味着,对于每个新用户,需要使用新的子域配置Tomcat。我认为这不能在Web应用程序中完成。
您可以创建通配符虚拟主机
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
</VirtualHost>
然后使用类似的东西处理应用程序代码中的子域 HttpServletRequest#getRequestURL()
我知道这是一个老问题,但我实际上想出了一个适用的答案 Tomcat的 最近:
首先,你需要Apache背后的Tomcat。
其次,您需要创建一个这样的网站定义:
<VirtualHost *:80>
ProxyRequests On
ProxyVia On
<Proxy http://example.com> #FIXDOMAIN
Order deny,allow
Allow from all
</Proxy>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(.+)\.example\.com$ [NC] #FIXDOMAIN
RewriteRule ^(.*)$ http://example.com$1?proxy_domain=%{HTTP_HOST} [P,QSA] #FIXDOMAIN
JkMount /* default
ServerName example.com #FIXDOMAIN
ServerAlias *.example.com #FIXDOMAIN
<!-- Other normal options go here -->
</VirtualHost>
第三,您需要在Tomcat中设置您的虚拟域 example.com
。
<Host name="example.com" appBase="webapps-example"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Alias>www.example.com</Alias>
</Host>
这将创建Apache可以处理的通配符域。该 mod_rewrite
规则会将URL重写为Tomcat理解的单个URL。然后,通过 mod_proxy
,子域域代理到基域,以及 GET
参数调用 proxy_domain
(在现有GET参数的基础上添加)以确定原始用户名是什么。
由于Apache Tomcat这样做,这是一个非常复杂的(可能不是非常可扩展的解决方案) 不 支持通配符域。但它确实有效!