Как выполнить внутреннее перенаправление с одного виртуального хоста на другой 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>
Конечно, проксирование может быть достигнуто с помощью перезаписи, но этот способ немного более явный и позволяет более точно контролировать параметры.