设想:
我有一个网站 - www.mydomain.com。注册用户可以选择获取 mydomain.com 上其帐户的永久 URL 作为子域名,例如 (username.mydomain.com),或者他们可以选择拥有自己的域名,例如 www.userdomain.com。因此,用户可以通过子域名 URL 或自己的主机名访问其帐户,并且请求应转发到 mydomain.com 上的特定 URL。
例如:xyz.mydomain.com 或 www.xyz.com 应向用户提供来自 www.mydomain.com/webapp/account?id=xyz 的帐户。用户应该完全不知道内容来自何处。
设置:
我的网站在 tomcat 5.5.28 中作为 webapp 运行,以 apache 作为 web 服务器。我使用 VPS,这意味着我可以控制所有配置文件(apache、tomcat 和 dns 服务器)。
你能告诉我实现上述场景需要哪些配置吗?
答案1
对于考虑网络服务器配置而言,“站点”是一个糟糕的抽象概念。您的网络服务器正在处理“请求”。
这些请求包含“hostname”和“url”属性。您可以使用 apache 中的代理和重写规则转换任何请求属性,但您还需要让您的应用程序知道如何处理转换后的参数。
如果您完全控制此应用程序 - 检查“主机名”请求标头并将其用作源数据可能会更容易。
答案2
信息不足。取决于您的应用的功能及其架构。
一个建议
您可以使用带有代理传递或 ajp 的 apache 前端吗?
为每个域创建一个虚拟主机,每个域有不同的 DocumentRoot,这样像图像和皮肤这样的东西就可以按域分开保存,如果需要的话,还可以保存不同的日志等等。
我认为配置应该是这样的,但是我是根据记忆进行的,并且目前没有测试设施,因此使用下面的配置建议作为粗略的想法 - 这不是一个可行的实现。
如果您已经设置了代理传递,则可以用 proxy_ajp 替换它 - 实际上我认为 proxy_ajp 是一个更好的解决方案,但我的记忆力不行那么好。
<VirtualHost *:443>
ServerName www.userdoman.com
ServerAlias userdomain.com
DocumentRoot /var/www/userdomain.com/html
ErrorLog /var/www/userdomain.com/logs/error_log
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog /var/www/userdomain.com/logs/access_log
ProxyPass /yourwebapp https://www.mydomain.com/yourwebapp
ProxyPassReverse /yourwebapp https://www.mydomain.com/yourwebapp
</virtualHost>