多个服务器在同一个端口上,使用aws弹性负载均衡器

我已经有了这个设置几乎所有的权利,显然,工程完全相同的方式比这个 :

UseCanonicalNames off <VirtualHost *:8888> RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.example1\.com RewriteCond %{HTTP_HOST} ^www\.[^.]+\.com$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^www\.([^.]+)\.com(.*) /var/www/html/$1$2 [L] </VirtualHost> 

它所做的是将除了example1之外的所有东西都redirect到它们各自的文件夹,位于/var/www/html/NNN 。 这是我所需要的基础知识 。 它还有一个额外的好处,允许一个名字( example1 )在example1/NNN/ ,这个名字也可以正常工作。

主要的问题可能是,它全部configuration在Amazon ELB的80端口内部8888之后。

所以,到目前为止,我发现的唯一问题是:如果我将浏览器指向www.example.com/anything/那就好了,但对于www.example.com/anything (没有最后一个斜杠),它将redirect浏览器到一个断开的链接www.example.com:8888/anything/exampleNNN

现在,我意识到我可能不应该使用重写为此 ,我已经试图改变一切mod_vhost_alias相反,但它让我想知道是否有什么可以做到解决上述问题以及任何进一步的问题这可能会引起我没有使用UseCanonicalNames onServerName的“正确的方式”,原因很明显(我不认为我们可以设置多个ServerName没有多个VirtualHost )。 当然,使用它们会是理想的,但是我找不到任何方法,所以我现在要走向另一个方向。

那么,有谁前进? 🙂

首先,你是正确的,这是一个相当重大的mod_rewrite滥用。

这就是说,你在这里面临的问题与你的重写规则有关。 它看起来像捕获主机名后面的所有内容,当你想捕获的只是path。 相应而不是

 RewriteRule ^www\.([^.]+)\.com(.*) /var/www/html/$1$2 [L] 

你要

 RewriteRule ^www\.([^.]+)\.com(:[0-9]+)?/(.*) /var/www/html/$1/$3 [L] 

正如我所说,我会,这是我做了什么来解决我的问题:

 UseCanonicalNames off NameVirtualHost *:8888 <VirtualHost *:8888> ServerName example1.com ServerAlias *.example1.com # more stuff below just to illustrate why I don't like this solution # redirect to HTTPS RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^login\.(.*)$ RewriteRule ^(.*) https://%1/login$1 [L] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$ RewriteRule ^/login(.*) https://%1/login$1 [L] </VirtualHost> <VirtualHost *:8888> ServerAlias * VirtualDocumentRoot /var/www/html/%-3 # more stuff below again, to illustrate why I don't like this solution # redirect to HTTPS RewriteEngine on RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^login\.(.*)$ RewriteRule ^(.*) https://%1/login$1 [L] RewriteCond %{HTTPS} off RewriteCond %{HTTP_HOST} ^www\.([^.]+\.com)$ RewriteRule ^/login(.*) https://%1/login$1 [L] </VirtualHost> 

当我等待并希望得到有关问题的答案时,这是我接受的解决scheme。

我实际上喜欢它,几乎比我用Rewrite尝试的还要多 – 这样可以保证在其他情况下工作。 也许我应该问另一个问题,我们如何macros/模板/函数/做一些重复的代码只写一次。