nginx файлы конфигурации с несколькими хостами обратного прокси вместо одного большого файла - PullRequest
0 голосов
/ 16 января 2020

ссылка на выпуск

У меня еще есть вопрос. Можно ли для каждой системы использовать обратный прокси-сервер, как описано выше, иметь отдельный файл conf в папке с включенными модулями. Я пробовал это, но nginx продолжает повторять, что директива stream является дубликатом. Может быть, я могу указать один потоковый модуль на различные серверные настройки, но я не знаю, как это сделать.

Может ли кто-нибудь помочь?

1 Ответ

0 голосов
/ 16 января 2020

Я немного поиграл с вашим примером использования в моей лабораторной среде, и вы действительно нашли довольно удобное решение для потоковой передачи прокси в зависимости от входящего субдомена. Основная проблема все еще, как упомянуто в моем комментарии : вы не должны иметь два раза один и тот же порт, который вы слушаете (в вашем случае 443). Это то, чего у вас нет в большом объединенном файле, но вы представляете его в разделенных файлах, и, поскольку nginx просто объединяет разделенные файлы, возникает ошибка, о которой вы упоминаете.

С моей точки зрения посмотреть путем изменения разбиения файлов, это должно работать. Вот пример, который я считаю полезным. Он состоит из 3 частей:

  • «префиксная» часть, которая содержит отображение
  • серверов, добавляйте столько, сколько хотите. Один сервер имеет отдельную директиву server {} с портом 5480, так как он используется только тогда, когда он может go в файле, указанном сервером c. Если это произойдет и для других серверов, то оно должно go в файле суффикса.
  • часть «суффикса», содержащая действительную директиву прохода прокси, которая всегда одинакова из-за использования $upstream variable

Я начал имена файлов с чисел, чтобы обеспечить их порядок при объединении их nginx.

Обратите внимание, что я проверил это с DNS и серверами, которые у меня есть, и могу контролировать , Я переписал примеры, чтобы они соответствовали вашим ситуациям. Я надеюсь, что он работает как есть, но поскольку у меня нет вашей настройки, он может не сработать сразу.

Префикс: 00_prefix.conf

map $ssl_preread_server_name:$server_port $upstream {
  tempserver01.domain.com:5480 tempserver01_vapp_5480;
  tempserver01.domain.com:443 tempserver01_backend_443;
  tempserver02.domain.com:443 tempserver02_backend_443;
}

Сервер 1: 01_realserver01.conf

upstream $upstream {
  hash $remote_addr consistent;
  server duckduckgo.com:443;
}

server {
  listen 5480;
  proxy_pass $upstream;
  ssl_preread on;
}

Сервер 2: 02_realserver02.conf

upstream $upstream {
  hash $remote_addr consistent;
  server duckduckgo.com:443;
}

Вы наверняка поняли, что часть server {} отсутствует. Это связано с тем, что он на 100% одинаков во всех случаях и, следовательно, должен быть разделен в одном файле, чтобы гарантировать, что он заканчивается только 1 раз в объединенной большой конфигурации nginx создает из всех битов и кусочков в отдельные файлы конфигурации.

Суффикс: 99_suffix.conf

server {
  listen 443;
  proxy_pass $upstream;
  ssl_preread on;
}

После перезагрузки nginx с помощью nginx -s reload вы можете проверить полный конкатенированный конфиг nginx, загруженный с nginx -T и вы увидите что-то вроде этого:

# configuration file /etc/nginx/stream/enabled/00_prefix.conf:
map $ssl_preread_server_name:$server_port $upstream {
  tempserver01.domain.com:5480 tempserver01_vapp_5480;
  tempserver01.domain.com:443 tempserver01_backend_443;
  tempserver02.domain.com:443 tempserver02_backend_443;
}
# configuration file /etc/nginx/stream/enabled/01_realserver01.conf:
upstream $upstream {
  hash $remote_addr consistent;
  server duckduckgo.com:443;
}

server {
  listen 5480;
  proxy_pass $upstream;
  ssl_preread on;
}
# configuration file /etc/nginx/stream/enabled/02_realserver02.conf:
upstream $upstream {
  hash $remote_addr consistent;
  server duckduckgo.com:443;
}
# configuration file /etc/nginx/stream/enabled/99_suffix.conf:
server {
  listen 443;
  proxy_pass $upstream;
  ssl_preread on;
}

Как видите, отдельные файлы объединены в правильном порядке, и все должно работать как положено. Я надеюсь, что это поможет вам.

...