Можно ли разместить несколько сайтов на одном порту в Nginx?

«Можно ли разместить несколько сайтов на одном порту в Nginx?» — вопрос из категории Веб-серверы и балансировка, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, это стандартная практика, реализуемая через виртуальные хосты (server blocks). Nginx определяет, какой сайт обслуживать, анализируя заголовок Host в HTTP-запросе.

Пример конфигурации:

# Сайт site1.com
server {
    listen 80;
    server_name site1.com www.site1.com;
    root /var/www/site1/html;
    index index.html;
    # Другие директивы для site1
}

# Сайт site2.com на том же порту
server {
    listen 80;
    server_name site2.com;
    root /var/www/site2/html;
    index index.php index.html;
    # Другие директивы для site2
}

Ключевые моменты:

  • Все блоки server слушают один порт (например, 80 или 443).
  • Идентификация происходит по полю server_name (доменное имя).
  • DNS-записи всех доменов (site1.com, site2.com) должны указывать на IP-адрес этого сервера.
  • Для HTTPS (порт 443) используется один сертификат с несколькими именами (SAN) или отдельные сертификаты, объединённые в конфигурации.