ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
SEO-сети и мульти-IP

Отдельный IP для каждого сайта на сервере для сети сайтов: Nginx, aaPanel и исходящий IP

8 шагов 11 мин чтения 3 просмотров 0
Содержание

На сервере для сети сайтов часто требуется, чтобы каждый сайт работал на собственном IP — так проще управлять сертификатами и изолировать риски. В статье показано, как назначить отдельный IP каждому сайту на сервере для сети сайтов: привязка адресов через listen IP:80/443 в Nginx, настройка в BT Panel/aaPanel, краткий обзор исходящего IP и SNAT, а также практические советы по SEO. Подходит для Nginx в Debian/Ubuntu и CentOS/Rocky/AlmaLinux.

Сначала привяжите блок IP к сетевому интерфейсу (см. статью о массовой привязке /24 в Linux) и направьте A-запись каждого домена на свой IP. В примерах используются 203.0.113.11, 203.0.113.12 и домены site1.example и site2.example.

Шаг 1: Убедитесь, что IP привязаны к интерфейсу

Nginx может слушать только существующие в системе адреса, иначе появится ошибка cannot assign requested address:

ip -4 addr show dev eth0 | grep inet

Шаг 2: Привязка сайта к отдельному IP через listen IP:80 в Nginx

В блоке server каждого сайта замените listen 80; на listen IP:80;. Конфиги обычно лежат в /etc/nginx/conf.d/ или /etc/nginx/sites-available/:

server {
    listen 203.0.113.11:80;
    server_name site1.example www.site1.example;
    root /var/www/site1;
    index index.html index.php;
}

server {
    listen 203.0.113.12:80;
    server_name site2.example www.site2.example;
    root /var/www/site2;
    index index.html index.php;
}

Теперь запросы на конкретный IP попадают только на сайты, привязанные к нему, даже если заголовок Host не совпадает.

Шаг 3: HTTPS-сайты через listen IP:443 ssl

Аналогично укажите отдельный IP для порта 443 и свой сертификат для каждого сайта:

server {
    listen 203.0.113.11:443 ssl;
    server_name site1.example www.site1.example;
    ssl_certificate     /etc/nginx/ssl/site1.example/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/site1.example/privkey.pem;
    root /var/www/site1;
}

Если на одном IP только один HTTPS-сайт, даже клиенты без поддержки SNI получат правильный сертификат.

Шаг 4: Сервер по умолчанию для каждого IP против чужих доменов

Добавьте default_server для каждого IP, отклоняющий неизвестные домены, чтобы никто не мог направить свой домен на ваш IP и зеркалировать контент:

server {
    listen 203.0.113.11:80 default_server;
    server_name _;
    return 444;
}

Шаг 5: Проверка конфигурации, перезагрузка Nginx и тест IP каждого сайта

nginx -t && systemctl reload nginx
ss -lntp | grep nginx

До обновления DNS проверяйте сайты с помощью curl --resolve:

curl -I --resolve site1.example:80:203.0.113.11 http://site1.example/
curl -I --resolve site2.example:80:203.0.113.12 http://site2.example/

Шаг 6: Сайты с разными IP в BT Panel / aaPanel

Новые сайты в BT Panel/aaPanel по умолчанию слушают порт 80 на всех IP. Чтобы привязать сайт к отдельному IP, откройте настройки сайта в панели, перейдите к конфигурационному файлу и замените строки listen на конкретный IP:

listen 203.0.113.11:80;
listen 203.0.113.11:443 ssl;
При изменении SSL, правил перезаписи или портов панель может заново сгенерировать строки listen — после этого проверьте конфиг ещё раз. Названия пунктов меню зависят от версии панели.

Шаг 7: Кратко об исходящем IP и SNAT

Директива listen в Nginx определяет только входящий IP. Исходящие запросы сервера (парсинг, вызовы API, почта) по умолчанию идут с основного IP. Чтобы трафик сайта уходил с нужного адреса, привяжите источник в коде (curl --interface, CURLOPT_INTERFACE в PHP cURL) или запускайте сайт от отдельного пользователя и настройте SNAT по пользователю через iptables:

useradd -r -s /sbin/nologin site1run
iptables -t nat -A POSTROUTING -o eth0 -m owner --uid-owner site1run -j SNAT --to-source 203.0.113.11
curl --interface 203.0.113.11 https://ifconfig.me

Сохраните правила через iptables-save или netfilter-persistent, иначе они пропадут после перезагрузки.

Советы по SEO для сети сайтов с разными IP

  • Отдельный IP — лишь базовое условие; уникальный контент, качество сайта и удобство для пользователей влияют на позиции намного сильнее;
  • Не используйте одинаковые шаблоны, тексты и коды аналитики на разных сайтах;
  • При необходимости настройте rDNS для IP и отдельный сертификат для каждого сайта;
  • Соблюдайте рекомендации поисковых систем для веб-мастеров, не используйте сеть сайтов для спам-ссылок и копирования чужого контента.

Частые вопросы

Nginx пишет bind() to 203.0.113.11:80 failed.

Обычно IP не привязан к интерфейсу или порт занят другим процессом. Проверьте через ip addr и ss -lntp.

По IP по-прежнему открывается другой сайт.

Проверьте, не осталось ли блока server с listen 80 default_server, и не указывает ли DNS на старый IP.

Можно ли сделать то же самое в Apache?

Да: используйте <VirtualHost 203.0.113.11:80> вместе с директивой Listen.

Если проблема не решена, создайте тикет в круглосуточную техподдержку IMIDC.

Помог ли вам данный ответ?

Похожие руководства