Я подумывал о переходе на Amazon EC2, чтобы разместить свой сайт и обрабатывать больше трафика. Похоже, мне пришлось бы обновить записи DNS, чтобы они указывали на новый сервер, но мне было интересно, есть ли способ избежать необходимости ждать распространения новой записи DNS. Размещение кода на обоих хостах для меня не сработает, поскольку приложение довольно часто записывает в базу данных. Я думал о том, чтобы просто использовать мета-перенаправление или перенаправление php на старом хосте для перенаправления на новый IP-адрес хоста, но мне было интересно, есть ли более приемлемый способ сделать это.
вот трюк, который я использую все время ... :) он предполагает, что вы управляете текущим сервером.
поместите site / db / something на новый сервер и на свой старый / текущий сервер, включите прокси, proxy_http и модули перезаписи, затем добавьте следующие строки в файл конфигурации apache для вашего старого / текущего сайта:
RewriteEngine on
ProxyPass / http://<your-fqdn-here>/
ProxyPassReverse / http://<your-fqdn-here>/
наконец, добавьте запись в свой / etc / hosts файл вашего старого / текущего сервера, имеющий следующий синтаксис:
<new-ip-address-of-ec2> <your-fqdn-here>
вот оно что. у вас есть обратный прокси, указывающий на себя, но разрешающий свое собственное имя вашему новому серверу. когда распространение dns развернется, новый сервер будет поражен напрямую. мы называем этот изящный трюк PRRP или Псевдо-рекурсивный обратный прокси.
Для тех надоедливых (надоедливых, я имею в виду плохо спроектированных) веб-приложений, которые требуют большого количества дыр в брандмауэре, это позволяет оставить на dmz только обратный прокси-сервер и подключать только порты 80/443 во внутреннюю сеть.
Вы также можете сократить время ожидания распространения DNS, снизив TTL для доменного имени перед переходом.
Попросите ваш старый хост прокси HTTP-запросы к новому хосту
(Это улучшает ответ Питера Карреро здесь, избегая необходимости изгиба локального DNS.)
Установите сайт на свой новый сервер.
На старом сервере сначала включите некоторые модули Apache:
a2enmod proxy
a2enmod proxy_http
a2enmod rewrite
Добавьте в конфигурацию vhost вашего сайта на старом сервере (где 123.456.1.1 - IP-адрес вашего нового сервера):
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
ProxyPreserveHost on
ProxyPass / http://123.456.1.1/
ProxyPassReverse / http://123.456.1.1/
Убедитесь, что для вашего веб-сайта на новом сервере не настроена пересылка трафика с HTTP на HTTPS. В сочетании с конфигурацией прокси это приведет к возникновению цикла перенаправления.
После завершения распространения DNS удалите конфигурацию vhost вашего веб-сайта со старого сервера, но переместите часть для перенаправления HTTP на HTTPS на новый сервер (при желании).
Пояснение: Как и в случае с ответом Питера, мы получаем обратный прокси-сервер, указывающий на тот же веб-сайт на другом сервере. Но вместо изгиба DNS через /etc/hosts
, мы создаем тот же эффект перезаписи DNS исключительно в конфигурации Apache с помощью ProxyPreserveHost on
. Согласно руководству Apache, это сохранит Host:
HTTP-заголовок исходного входящего запроса, установленного при его проксировании на новый сервер. Таким образом, сервер будет использовать его как обычно для виртуального хостинга на основе имени.