Какво да вземете предвид при мигриране към друг доставчик на уеб хостинг
Мигрирането на уебсайт към нов хостинг доставчик е една от най-рисковите инфраструктурни операции, които собственикът на сайт може да предприеме. Извършена правилно, тя води до нулева загуба на данни, незначителен престой и измеримо по-добра производителност. Извършена небрежно, тя предизвиква повредени бази данни, DNS грешки, спад в SEO класирането и часове спешна работа по възстановяване.
Това ръководство обхваща всяка критична фаза на хостинг миграцията — от одит преди миграцията и валидиране на съвместимостта, през механиката на DNS прехода, до мониторинг след миграцията — с техническата дълбочина, необходима за безпроблемното й изпълнение.
Фаза 1: Одитирайте текущата си хостинг среда, преди да докоснете каквото и да е
Най-честата причина за неуспешна миграция е пропускането на задълбочен одит на съществуващата среда. Преди да оцените нов доставчик, трябва да имате точна инвентаризация на това, което действително използвате.
Профилиране на трафика и ресурсите
Извлечете поне 90 дни данни за сървърните ресурси — не само броя на прегледите на страниците. Важните метрики са:
- Пиковите едновременни връзки — не средният трафик, а максималният пик, който сървърът трябва да обработи
- Консумацията на памет на PHP работник или процес на приложение
- Моделите на дисков I/O — особено важни, ако използвате приложение с интензивна база данни като WooCommerce или персонализиран CRM
- Използването на честотна лента — месечните общи трансфери спрямо ограничението на текущия ви план
Ако текущият ви хост предоставя cPanel или Plesk, тези данни са достъпни в секциите за използване на ресурси или AWStats. На Linux VPS изпълнете следното, за да заснемете базова снимка:
vmstat 1 10
iostat -x 1 5
free -m
df -hТози резултат ви показва дали тесното ви място е CPU, RAM или диск — което директно определя дали имате нужда от по-голям споделен план, VPS или Dedicated Server.
Инвентаризация на софтуерния стек
Документирайте всеки компонент на стека си с точни номера на версиите:
- PHP версия (напр. 8.1, 8.2) и активни разширения (
mbstring,curl,gd,imagick,redis) - MySQL или MariaDB версия и механизъм за съхранение (InnoDB срещу MyISAM е важно за инструментите за миграция)
- Уеб сървърен софтуер: Apache, Nginx, LiteSpeed или комбинация с обратен прокси
- Всякакви компилирани модули, персонализирани
.htaccessправила илиnginx.confблокове за местоположение - Cron задачи — експортирайте ги от
crontab -lи ги документирайте отделно - Тип и издател на SSL сертификат (Let’s Encrypt, търговски CA, wildcard)
Пропускането дори на едно PHP разширение на целевия сървър може безшумно да наруши функционалност, която се проявява само при специфични действия на потребителя — грешка, която е известно трудна за проследяване след миграцията.
Фаза 2: Оценете и изберете правилното ниво на хостинг
Изборът на грешно ниво на хостинг е структурна грешка, която налага втора миграция в рамките на месеци. Съпоставете резултатите от одита с правилния клас инфраструктура.
Сравнение на нивата на хостинг
| Критерий | Споделен хостинг | VPS хостинг | Dedicated Server |
|---|---|---|---|
| — | — | — | — |
| Изолация | Никаква — споделени ресурси | Пълна изолация на ниво ОС | Пълна хардуерна изолация |
| CPU/RAM | Споделен пул, ограничен | Гарантирано разпределение | Пълно хардуерно разпределение |
| Root достъп | Не | Да | Да |
| Персонализиран софтуер | Силно ограничен | Пълен контрол | Пълен контрол |
| Мащабируемост | Само вертикална, ограничена | Вертикална + хоризонтална | Изисква хардуерен ъпгрейд |
| Най-подходящ за | Брошурни сайтове, нисък трафик | Растящи приложения, e-commerce | Висок трафик, строги изисквания за съответствие |
| Типичен SLA за наличност | 99.9% | 99.9%–99.99% | 99.99% |
| DDoS защита | Основна или никаква | Зависи от доставчика | Разширена, конфигурируема |
Ключово правило за решение: Ако приложението ви изисква специфична конфигурация на PHP-FPM пул, Redis socket връзки, персонализирани Nginx пренаписвания или какъвто и да е daemon процес, споделеният хостинг е архитектурно несъвместим. Нуждаете се от минимум VPS с root достъп.
За WordPress или Joomla сайтове с умерен трафик, VPS с cPanel осигурява познатия интерфейс на контролния панел, като същевременно запазва изолацията и производителността на виртуална машина.
Критерии за оценка на доставчика
Освен маркетинговите твърдения, оценявайте доставчиците по тези проверими технически фактори:
- SLA за наличност с клаузи за финансови санкции — SLA от 99.9% без компенсация е безсмислен
- Рейтинг на ниво на центъра за данни (Tier III или Tier IV за производствени натоварвания)
- Мрежова излишност — BGP multi-homing, множество upstream доставчици
- Тип съхранение — NVMe SSD срещу SATA SSD срещу въртящ се диск (разликите в латентността са значителни)
- Политика за резервни копия — честота, период на съхранение, дали резервните копия се съхраняват извън обекта
- SLA за времето за отговор на поддръжката — разграничете между времето за първи отговор и времето за разрешаване
Фаза 3: Създайте и проверете пълно резервно копие
Никоя миграция не трябва да започва без проверено, възстановимо резервно копие. „Проверено” означава, че действително сте тествали възстановяването — не само сте потвърдили, че файлът с резервното копие съществува.
Какво трябва да включва пълното резервно копие
- Файловете на уеб корена — целият document root, включително скрити файлове като
.htaccessи.env - Всички бази данни — експортирани като
.sqlдъмпове, не само копие на файловете от директорията на базата данни - Имейл данни — ако използвате Email Hosting, свързан с домейна ви, експортирайте пощенските кутии преди каквито и да е DNS промени
- Cron задачи —
crontab -l > crontab_backup.txt - SSL сертификати и частни ключове — ако използвате търговски сертификат, експортирайте пълната верига
- Конфигурационни файлове на сървъра —
/etc/nginx/,/etc/apache2/,/etc/php/, персонализираниmy.cnfнастройки
Извършване на експорт на база данни
За MySQL/MariaDB използвайте mysqldump с опции, които запазват пълната точност:
mysqldump
--single-transaction
--routines
--triggers
--events
--set-gtid-purged=OFF
-u root -p your_database_name > database_backup_$(date +%F).sqlФлагът --single-transaction е критичен за InnoDB таблици — той прави последователна снимка без заключване на таблиците, което означава, че живият ви сайт продължава да обслужва заявки по време на дъмпа.
Проверка на целостта на резервното копие
# Check the SQL dump is not truncated
tail -5 database_backup_2024-01-15.sql
# Verify file count in web root backup
tar -tzf webroot_backup.tar.gz | wc -l
# Test restoration to a local or staging environment
mysql -u root -p test_restore_db < database_backup_2024-01-15.sqlРезервно копие, което не сте тествали за възстановяване, не е резервно копие — то е фалшиво усещане за сигурност.
Фаза 4: Валидирайте съвместимостта на целевия сървър
Преди да прехвърлите производствени данни, стартирайте новата среда и валидирайте съвместимостта чрез подход за staging.
Проверка на PHP версията и разширенията
# On the destination server
php -v
php -m | grep -E 'mbstring|curl|gd|imagick|redis|zip|intl|opcache'Сравнете този резултат с инвентаризацията от Фаза 1. Всяко липсващо разширение трябва да бъде инсталирано преди миграцията, а не след нея.
Проверка на съвместимостта на базата данни
При мигриране от MySQL 5.7 към MySQL 8.0 (често срещан сценарий), имайте предвид тези критични промени:
- Наборът от символи
utf8mb3е остарял; колоните може да се нуждаят от явни декларации на набора от символи - Поведението на
GROUP BYсе е променило — заявки, работили в 5.7, може да се провалят в 8.0 без корекция на режимаONLY_FULL_GROUP_BY NO_ZERO_DATEе активиран по подразбиране в строг режим, което отхвърля полета за дата, съдържащи0000-00-00
Тествайте SQL дъмпа си спрямо целевата MySQL версия, преди да преминете производствения трафик.
Превод на конфигурацията на уеб сървъра
При мигриране от Apache към Nginx (честа ситуация при преминаване към производителностно оптимизиран VPS), правилата ви за .htaccess не се превеждат автоматично. Чести преобразувания:
Apache .htaccess пренасочване:
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Nginx еквивалент в server блок:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}Пропускането на това преобразуване е една от най-честите причини за 404 грешки и пренасочващи цикли след миграцията.
Фаза 5: Изпълнете миграцията с минимизиране на престоя
Изберете стратегически прозорец за миграция
Анализирайте Google Analytics или сървърните си логове, за да идентифицирате прозореца с най-нисък трафик — обикновено между 02:00 и 05:00 в часовата зона на основната аудитория в събота или неделя. Избягвайте петъците; ако нещо се обърка, опциите ви за поддръжка се стесняват значително през уикенда.
Работният процес на миграция с приоритет на staging
- Насочете поддомейн към новия сървър (напр.
staging.example.com) с помощта на A запис, без да докосвате производствения DNS - Прехвърлете всички файлове и бази данни към новия сървър
- Актуализирайте низа за връзка с базата данни на приложението, за да сочи към новата база данни
- Модифицирайте локалния си
/etc/hostsфайл, за да разрешава производствения домейн към IP адреса на новия сървър — това ви позволява да тествате пълната производствена конфигурация, без да засягате живите потребители:
# Add to /etc/hosts on your local machine
203.0.113.50 example.com www.example.com- Извършете пълен функционален тест — всяка форма, платежен поток, система за вход, API крайна точка и качване на медия
- Изпълнете тестове за производителност с
ab(Apache Benchmark) илиwrk:
ab -n 1000 -c 50 https://example.com/- Само след преминаване на всички тестове продължете към DNS прехода
Конфигурация на SSL сертификат
Уверете се, че SSL сертификатът е инсталиран и валидиран на новия сървър преди DNS прехода. Ако използвате Let’s Encrypt:
certbot --nginx -d example.com -d www.example.comАко използвате търговски сертификат от доставчик като тези, достъпни чрез SSL Certificates, инсталирайте пълната верига на сертификата (сертификат + междинен CA + root CA), за да избегнете грешки при валидиране на веригата при по-стари клиенти.
Фаза 6: DNS преход — най-технически чувствителната стъпка
DNS разпространението е широко погрешно разбрано. Цифрата от 48 часа е максималният таван в най-лошия случай, а не типична продължителност. На практика повечето резолвери спазват стойността TTL на променяния запис.
Намаляване на TTL преди прехода
Поне 24–48 часа преди прозореца за миграция намалете TTL на A записите и CNAME записите до 300 секунди (5 минути):
example.com. 300 IN A 203.0.113.50
www.example.com. 300 IN A 203.0.113.50Това означава, че след като актуализирате записа към новия IP, старата кешираната стойност изтича в рамките на 5 минути за повечето резолвери — не 48 часа. Това е единствената най-въздействаща техника за минимизиране на прозореца за DNS разпространение.
Актуализации на Name Server срещу A запис
Съществуват два различни подхода за DNS преход:
- Промяна само на A записи (при запазване на същите авторитетни nameserver-и): Разпространението следва TTL на записа. Най-бързият подход, ако регистраторът на домейна ви позволява директно управление на записи.
- Промяна на nameserver-и (насочване към DNS на новия хост): TTL на nameserver-ите обикновено е 24–48 часа и не е под вашия пряк контрол. Този подход отнема повече време.
Предпочитайте актуализации на A записи, когато е възможно. Управлявайте DNS на домейна си чрез контролния панел за Domain Registration за директен контрол на ниво запис.
Поддържане на стария сървър активен по време на разпространението
Не отменяйте и не изключвайте стария хостинг план веднага след DNS прехода. Поддържайте го работещ минимум 72 часа. По време на разпространението, част от потребителите ви все още ще разрешават стария IP — тези заявки трябва да продължат да се обслужват. Преждевременното изключване на стария сървър създава реален престой за тези потребители.
Фаза 7: Мониторинг и валидиране след миграцията
Мониторинг на наличността и производителността
Конфигурирайте външен мониторинг на наличността веднага след DNS прехода — не след като смятате, че разпространението е завършено. Инструменти за внедряване:
- UptimeRobot или Better Uptime — HTTP(S) проверки на всеки 1–5 минути от множество географски местоположения
- Google Search Console — наблюдавайте отчетите за Coverage и Core Web Vitals за аномалии в 7-те дни след миграцията
- New Relic или Datadog — мониторинг на производителността на ниво приложение, ако приложението ви го изисква
Идентифициране и разрешаване на грешки след миграцията
Незабавно извършете обхождане на новия сайт с помощта на Screaming Frog или wget mirror:
wget --spider --recursive --no-verbose --output-file=crawl_log.txt https://example.com
grep -i "broken|404|error" crawl_log.txtЧести проблеми след миграцията и техните причини:
| Проблем | Вероятна причина | Решение |
|---|---|---|
| — | — | — |
| 404 на всички страници | `.htaccess` липсва или mod_rewrite не е активиран | Възстановете `.htaccess`, активирайте `AllowOverride All` |
| Грешка при връзка с базата данни | Грешни идентификационни данни в конфигурационния файл | Актуализирайте `wp-config.php` или `.env` |
| Предупреждения за смесено съдържание | Твърдо кодирани `http://` URL адреси в базата данни | Извършете търсене и замяна в базата данни |
| Имейлът не се изпраща | SMTP relay не е конфигуриран на новия сървър | Конфигурирайте Postfix или използвайте SMTP плъгин |
| Счупени изображения | Неправилни разрешения за файлове | `find /var/www -type f -exec chmod 644 {} ;` |
| Цикъл на пренасочване | SSL пренасочването е дублирано в `.htaccess` и Nginx | Премахнете дублираното правило за пренасочване |
Коригиране на твърдо кодирани URL адреси в WordPress бази данни
Чест и фин проблем: WordPress съхранява URL адреса на сайта в базата данни, а много теми и плъгини съхраняват абсолютни URL адреси в сериализирани данни. След миграция към нов домейн или протокол, изпълнете:
wp search-replace 'http://old-domain.com' 'https://new-domain.com'
--all-tables
--precise
--report-changed-onlyФлагът --precise обработва правилно PHP сериализираните данни, което наивното заместване на низове нарушава.
Фаза 8: Отменете стария хостинг план
Отменете стария план само след потвърждаване на всички следни условия:
- DNS разпространението е завършено (проверете с
dig +trace example.comот множество местоположения) - Мониторингът на наличността показва 100% достъпност за поне 72 последователни часа
- Не са открити 404 грешки или счупени връзки в логовете от обхождането
- Доставката на имейли функционира правилно на новия сървър
- Анализите показват нормални модели на трафик без аномални спадове
- Разполагате с локално копие на всички резервни файлове, независимо от двата хостинг доставчика
Технически контролен списък с ключови изводи
Използвайте това като контролен списък за изпълнение на миграцията:
Преди миграцията
- [ ] Експортирана базова линия за използване на ресурси за 90 дни (CPU, RAM, I/O, честотна лента)
- [ ] Документиран пълен софтуерен стек с точни номера на версиите
- [ ] DNS TTL намален до 300 секунди поне 24 часа преди прехода
- [ ] Създадено и тествано пълно резервно копие (файлове + бази данни + cron задачи + имейл)
- [ ] Валидирани PHP версия и всички необходими разширения на целевия сървър
- [ ] Преведени
.htaccessправила в Nginx формат при смяна на уеб сървъри - [ ] Инсталиран и валидиран SSL сертификат на новия сървър преди DNS промяната
По време на миграцията
- [ ] Файловете прехвърлени с
rsyncс проверка на контролна сума (rsync -avz --checksum) - [ ] Базата данни импортирана и броят на редовете проверен спрямо източника
- [ ] Пълната функционалност на сайта тествана чрез
/etc/hostsзамяна преди DNS промяната - [ ] Актуализирани конфигурационни файлове на приложението (хост на базата данни, идентификационни данни, URL на сайта)
След миграцията
- [ ] Външният мониторинг на наличността активен в рамките на 5 минути след DNS прехода
- [ ] Старият сървър поддържан работещ минимум 72 часа след прехода
- [ ] Пълното обхождане на сайта завършено; всички 404 грешки и счупени връзки разрешени
- [ ] Твърдо кодираните URL адреси коригирани в базата данни (особено за WordPress)
- [ ] Google Search Console наблюдаван 7 дни след миграцията
- [ ] Старият хостинг план отменен само след потвърждаване на всички горни точки
Често задавани въпроси
Колко всъщност отнема DNS разпространението и мога ли да го ускоря?
Продължителността на DNS разпространението се определя от стойността TTL на променяния запис, а не от фиксиран 48-часов прозорец. Ако намалите TTL на A записа до 300 секунди поне 24 часа преди миграцията, повечето резолвери ще вземат новия IP в рамките на 5–10 минути след промяната. Цифрата от 48 часа се отнася за промени в делегирането на nameserver, чиито TTL са извън вашия контрол.
Ще навреди ли мигрирането към нов хост на класирането ми в Google?
Правилно изпълнена миграция без престой, запазена URL структура и валиден SSL няма отрицателно SEO въздействие. Класирането може временно да спадне, ако новият сървър е по-бавен, ако URL адресите се променят без правилни 301 пренасочвания или ако сайтът е недостъпен по време на обхождане. Наблюдавайте отчетите за Coverage и Core Web Vitals в Google Search Console 14 дни след миграцията.
Какъв е най-безопасният начин за прехвърляне на големи бази данни без повреждане на данните?
Използвайте mysqldump с флага --single-transaction за InnoDB таблици, за да осигурите последователна снимка без заключване на таблиците. Прехвърлете дъмп файла по SSH с помощта на scp или rsync вместо phpMyAdmin, който има ограничения за размер на файла и ограничения за изчакване, причиняващи безшумно съкращаване при големи бази данни.
Трябва ли да преинсталирам SSL сертификата след миграцията?
Да. SSL сертификатите са обвързани с частния ключ на сървъра, който се намира на оригиналния сървър. Трябва или да преиздадете сертификата на новия сървър (безплатно за Let’s Encrypt), или да експортирате частния ключ и веригата на сертификата от стария сървър и да ги инсталирате на новия. Уверете се, че сертификатът е напълно валидиран преди актуализиране на DNS, така че HTTPS да работи незабавно след прехода.
Как да проверя дали миграцията е завършена, преди да отменя стария план?
Изпълнете dig +trace example.com @8.8.8.8 и dig +trace example.com @1.1.1.1, за да потвърдите, че и Google, и Cloudflare резолверите връщат IP адреса на новия сървър. Проверете мониторинга на наличността за 72 последователни часа с чисти отговори. Обходете сайта за 404 грешки и проверете доставката на имейли. Само след преминаване на всички тези проверки е безопасно да прекратите стария хостинг акаунт.
