Mod_Rewrite Apache ProxyPass?

我有两个网站 OLDSITE和新闻网站。 OLDSITE拥有120个IP地址,新闻网站有5个。我希望能够将所有事情从OLDSITE和NEWSITE中分离出来,这样他们就不会被绑在一起,而是可以在同一台Linux计算机上使用它们。 我目前的Apache设置是这样的:

Listen 80 NameVirtualHost * <VirtualHost *> ServerName oldsite.com ServerAdmin [email protected] DocumentRoot /var/www/ <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> RewriteEngine on RewriteCond %{HTTP_HOST} ^([^.]+)\.oldsite\.com$ RewriteCond /home/%1/ -d RewriteRule ^(.+) %{HTTP_HOST}$1 RewriteRule ^([^.]+)\.oldsite\.com/media/(.*) /home/$1/dir/media/$2 RewriteRule ^([^.]+)\.oldsite\.com/(.*) /home/$1/www/$2 </VirtualHost> <VirtualHost newsite.com> ServerName newsite.com ServerAdmin [email protected] DocumentRoot /var/newsite/ <Directory /var/newsite/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> RewriteEngine on RewriteCond %{HTTP_HOST} ^([^.]+)\.newsite\.com$ RewriteCond /home/%1/ -d RewriteRule ^(.+) %{HTTP_HOST}$1 RewriteRule ^([^.]+)\.newsite\.com/media/(.*) /home/$1/dir/media/$2 RewriteRule ^([^.]+)\.newsite\.com/(.*) /home/$1/www/$2 </VirtualHost> <VirtualHost *> ServerName panel.oldsite.com ProxyPass / http://panel.oldsite.com:10000/ ProxyPassReverse / http://panel.oldsite.com:10000/ <Proxy *> allow from all </Proxy> </VirtualHost> <VirtualHost *> ServerName panel.newsite.com ProxyPass / http://panel.newsite.com:10000/ ProxyPassReverse / http://panel.newsite.com:10000/ <Proxy *> allow from all </Proxy> </VirtualHost> 

我希望能够访问任何是newsite.com,并将其转到/ var / newsite,除非它们是一个主目录…然后,如果它的panel.newsite.com我希望它自动做一个代理通行证panel.newsite.com:10000 …有了这个设置,它适用于oldsite.com ….代理和网页…但是,将虚拟主机设置为newsite.com呈现代理通行证毫无价值。 如果我将newsite.com的虚拟主机更改为通配符,则代理通行将会正常工作,但是任何这样的情况,即newsite.com的子域名将不起作用。 所以newsite.com将工作,但www.newsite.com将无法正确加载。

我假设,当一切都通配符,然后ServerName有点像一个RewriteCond,实际上只是适用于该URL的东西。 它使用虚拟主机*(oldsite.com),让ANYTHING.oldsite.com工作,但第二个虚拟主机*(newsite.com)只有newsite.com将工作… www.newsite.com不会。 如果我改变它们的顺序,情况正好相反。 所以显然它不喜欢我使用2通配符…

我尝试只是使Servername * .newsite.com …….但这太容易了。 我不确定我能做什么来做我想做的事情? 也许我应该将ProxyPass包含在VirtualHosts中,并使用如下所示的内容:

 RewriteCond %{HTTP_HOST} ^panel\.newsite\.com$ [NC] RewriteRule ^(.*)$ http://panel.newsite.com:10000/ [P] ProxyPassReverse / http://panel.newsite.com:10000/ 

但似乎并不想login到webmin,它加载login页面,但不是如何ProxyPass和ProxyPassReverse工作。

如果Apache找不到具有匹配的ServerName或ServerAlias的VirtualHost,则它会使用configuration文件中find的第一个VirtualHost作为默认值。 通过上面的configuration,我认为例如“www.newsite.com”最终将由oldsite.com VirtualHost处理。

你有尝试添加一个ServerAlias线路的两个主要VirtualHosts – 即

 <VirtualHost *> ServerName oldsite.com ServerAlias *.oldsite.com ... </VirtualHost> <VirtualHost *> ServerName newsite.com ServerAlias *.newsite.com ... </VirtualHost>