如何从一个虚拟主机内部重定向到另一个 Apache

如何从一个虚拟主机内部重定向到另一个 Apache

我正在将我的应用程序升级到新的 PHP 版本。

为此,我创建了两个虚拟主机,一个服务器 PHP 5.3 应用程序,另一个服务器 PHP 5.6。

我的虚拟主机就像,

<VirtualHost *:80>
  ServerName php53app.com 
  DocumentRoot /var/www/php_53/public 
  <Directory />
   Options FollowSymLinks
   AllowOverride All
   AddHandler php-cgi .php
   Action php-cgi /cgi-bin-php/php-cgi-5.3.0
  </Directory>
  ErrorLog /var/log/apache2/error.log
  LogLevel warn
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>

<VirtualHost *:80>
  ServerName php56app.com 
  DocumentRoot /var/www/php_56/public 
  <Directory />
   Options FollowSymLinks
   AllowOverride All
   AddHandler php-cgi .php
   Action php-cgi /cgi-bin-php/php-cgi-5.6.0
  </Directory>
  ErrorLog /var/log/apache2/error.log
  LogLevel warn
  CustomLog /var/log/apache2/access.log combined
</VirtualHost>

我计划逐个 url 进行迁移。

例如 :

当我迁移/login到新应用程序时,它应该显示php53app.com/login而不是php56app.com/login

因此我需要为同一域名的所有 URL 提供服务,无论是新域名还是旧域名。有没有可能使用 apache 的 mod rewrite 之类的方法?

答案1

重写并不是真正的解决方法。您应该使用代理请求。

来自 mod_proxy 文档:

此外,可以简单地使用反向代理将多个服务器带入同一个 URL 空间。

您的设置将如下所示:

<VirtualHost *:80>
    ServerName php53app.com 
    DocumentRoot /var/www/php_53/public

    # General proxy config ... do not skip
    <Proxy *>
        AddDefaultCharset off
        Order deny,allow
        Allow from all
    </Proxy>

    # now proxy the migrated part
    <Location /login>
        ProxyPass           http://php56app.com/login
        ProxyPassReverse    http://php56app.com/login
    </Location>

    <Directory />
        Options FollowSymLinks
        AllowOverride All
        AddHandler php-cgi .php
        Action php-cgi /cgi-bin-php/php-cgi-5.3.0
    </Directory>
    ErrorLog /var/log/apache2/error.log
    LogLevel warn
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

当然,可以通过重写来实现代理,但是这种方式更明确一些,可以更好地控制选项。

相关内容