- Обеспечьте общую внутреннюю сеть между 1 и 2 сервером.
- Поставьте nginx на 1 сервер, указав в качестве бэкенда ваше веб-приложение на 127.0.0.1.
- Разверните копию nginx, файлов сайта и структуру БД на втором сервере.
- Убедитесь, что с первого сервера есть связь к вашему веб-приложению (ему самому, а не nginx) через внутреннюю сеть.
- Однажды ночью, проведите короткую профилактику, остановив первый сайт.
- Перенесите данные БД с первого сервера на второй.
- Настройте на первом сервере у nginx в качестве бэкенда второй сервер.
- Смените DNS с первого сервера на второй.
Теперь ваше веб-приложение работает на втором сервере, а при подключении к первому, пользователь получит результат работы второго сервера.
Первый сервер можно оставить в эфире до тех пор, пока к нему не прекратятся соединения.
--
P.S. Чтобы не морочиться с внутренними сетями (хотя это несложно сегодняшними средствами), вот альтернатива первому пункту:
Откройте в фаерволе на втором сервере возможность первому серверу подключиться прямиком к веб-приложению по его порту. В 7 пункте, nginx можно будет настроить на публичный адрес и порт приложения. Учтите, что трафик между двумя серверами в этом случае шифроваться не будет. Рисков в связи с этим не очень много, но, при желании, соседи или ЦОД смогут "подслушивать" ваш трафик между серверами.