Как выполнить внутреннее перенаправление с одного виртуального хоста на другой 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 по URL.

Например:

Когда я мигрирую /login в новое приложение, оно должно показать php53app.com/login вместо php56app.com/login,

Поэтому мне нужно обслуживать все URL в одном доменном имени, независимо от того, является оно новым или старым. Есть ли какой-нибудь возможный способ с помощью переписывания мод Apache или что-то?

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>

Конечно, проксирование может быть достигнуто с помощью перезаписи, но этот способ немного более явный и позволяет более точно контролировать параметры.

Другие вопросы по тегам