У меня есть устаревшая система, в которую я пытаюсь внести существенные изменения в конфигурацию, но не вижу возможности сделать это чисто.
Состояние, которое я унаследовал, состоит из веб-сайта, размещенного на двух серверах приложений, которые находятся за балансировщиком нагрузки (на каждом сервере размещается стек LAMP). Запись A (example.com) для домена указывает на балансировщик, как и запись CNAME для www.
Теперь я хотел бы переместить этот сайт на другой сервер, который я настроил и готов к работе, что обычно было бы довольно просто; однако моя проблема заключается в том, что серверы, которые в настоящее время обслуживают веб-сайт, также обслуживают дополнительные приложения, обслуживаемые из подкаталогов в тех же записях «example.com» и «www.example.com».
Я хочу следующее:
www.example.com и example.com указывают на сервер A
www.example.com/scripts ... и example.com/scripts ... указывают на текущий балансировщик нагрузки
Это было бы просто, если бы службы изначально были настроены в субдоменах, но это не так, и выполнение миграции было бы довольно болезненным для значительного числа клиентов.
Я не могу найти элегантного способа сделать это. У кого-нибудь есть предложения?
Обновить:
Чтобы уточнить, продукты в каталоге / scripts / ... доступны программно через SSL-соединение клиентскими приложениями (это служба, которая принимает строку запроса и возвращает XML). Влияет ли это на решение?
Вы не можете настроить поддомен для основного приложения? Что-то вроде www2.example.com (или вообще удалить поддомены и разместить его только на example.com), а затем просто перенаправить из корня сайта на новый поддомен? Если вы выполняете перенаправление с помощью .htaccess, вы можете перенаправить все, кроме / scripts, на новый сервер.
Файл .htaccess будет выглядеть примерно так:
RewriteEngine на
RewriteCond $ 1! ^ Скрипты
RewriteRule (. *) http://www2.example.com/1 доллар США [R = 301, L]
Приведенный выше код 301 указывает, что перенаправление является постоянным; поисковым системам это понравится, если вы беспокоитесь о потере рейтинга. Кроме того, этот код должен перенаправлять пользователей на эквивалентную страницу по новому URL-адресу, чтобы закладки и другие ссылки на страницы по старому URL-адресу по-прежнему работали. (Хотя сначала проверьте это)
Настройте обратный прокси на NewServer, который будет перенаправлять все запросы к определенному URL / URI на ваш OldServer.
Очевидно, вам придется создать отдельный домен для старого сервера, но при этом сохранятся URL-адреса.
http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
<Location /legacy-app/>
ProxyPass http://oldserver.example.com/legacy-app/
SetEnv force-proxy-request-1.0 1
SetEnv proxy-nokeepalive 1
</Location>
Ага - немного соленья. Для долгосрочного решения вам, вероятно, следует поработать над перемещением других приложений на их собственные сайты. В качестве временного обходного пути вы должны использовать перенаправление либо на балансировщике нагрузки, либо на исходных серверах LAMP на новый сайт, пока вы не сможете изменить запись www.