@CTAP_MEX
DevOps

Nginx, обратное проксирование http и https?

Господа, выручайте!
В сети:
Керио - разруливает трафик. Http и https отправляет на Nginx.
Nginx - должен выступать в роли реверс-прокси.
IIS - выступает в роли реверс-прокси.
Тестовые сайты разработчиков, как правило хостятся на доменных машинах самих разработчиков, работают по HTTP (test_1.test.domain.net, test_2.test.domain.net......) для них на IIS написаны схемы переопределения по типу test_1 = ip:port и т.д.
Боевые сайты, хостятся на серверах в домене, некоторые работают по HTTPS (site_1.domain.ru, site_2.domain.ru....) для них на IIS подняты фермы, написаны шаблоны, указаны либо ip адреса с портами, либо фермы.
Задача: убрать IIS, а роль реверс прокси предоставить Nginx`у.

На данный момент на Керио работает правило, по которому весь HTTPS трафик уходит на Nginx:
server {
    listen 443 ssl;
    server_name .domain.ru;
      
    include /etc/nginx/include/ssl;  # инклюд сертификатов
      
    location / {
        proxy_pass http://IIS:80/;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

По сути, Nginx только цепляет сертификат к сайту и футболит его на IIS, где сайт попадает под то или иное правило, и попадает либо на соответствующую ферму, либо на соответствующий ip:port.

С тестовыми сайтами, работающими по http вроде разобрался. Предварительно включив правило в Керио, по которому HTTP трафик уходит на Nginx:
server {
	    listen 80;   
	    server_name test_1.test.domain.net;       #проверяем имя сайта
    
  	location / {

		proxy_pass http://192.168.0.100/;    #IP адрес и порт сайта внутри сети
                proxy_redirect  off;
		proxy_set_header Host $host;
                proxy_set_header X-relay-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
}

и так далее для каждого тестового сайта по http.

А вот для https ни как не могу настроить... Если добавляю конфиг хотябы для одного сайта:
server {
    
    listen 443 ssl;
    server_name site_1.domain.ru;
    
    include /etc/nginx/include/ssl;  # инклюд сертификатов
    access_log /etc/nginx/logs/issues.access.log;
    error_log /etc/nginx/logs/issues.error.log;
    
    location / {
		proxy_pass http://site_1.domain.ru;
		proxy_set_header Host $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	}
 }

Остальные сайты site_2.domain.ru, site_3.domain.ru, для которых нет явных конфигов тоже работают. Мне этот момент не понятен ни как...

Собственно, как реализовать реверс проксирование для https? Не хочется делать по аналогии с http. Хочется как-то унифицировать это дело.

З.Ы. Сильно не пинайте, с Nginx`ом только начал разбираться.
  • Вопрос задан
  • 1543 просмотра
Пригласить эксперта
Ответы на вопрос 1
kotomyava
@kotomyava
Системный администратор
Если у вас сайт там же, то зачем вам вообще двойное проксирование? Принимайте сразу запросы на тот server{} который во втором фрагменте.

В чём проблема во втором случае, из вопроса вообще не понятно. Вы терминируете ssl на nginx, и проксируете дальше на бекэнд http запросы, всё правильно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы