Войти

Показать полную графическую версию : nginx reverse proxy, 2 сайта, https и http


YDen
27-11-2023, 19:05
Здравствуйте.
Подскажите пожалуйста по nginx reverse proxy.
Внутри ЛВС находятся 2 веб сервера на апаче: web1 и web2. Web1 работает на https (firma.ru, установлен сертификат letsencrypt), web2 - http. Соответственно перед ними стоит nginx reverse proxy. Для web1 на nginx выпущен и загружен второй сертификат letsencrypt (firma.ru).

конфиг nginx web1:
/etc/nginx/sites-available/firma.ru.conf
server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name firma.ru;

ssl_certificate "/etc/letsencrypt/live/firma.ru/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/firma.ru/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;

proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;

location / {
proxy_pass https://firma.ru/;
}
}


Вопрос:
1. оптимален ли конфиг nginx для web1?
2. какой оптимальный код nginx для сайта web2 (http, http://10.12.0.245:9090/)?

благодарю

shisik
27-11-2023, 20:08
Внутри ЛВС находятся 2 веб сервера на апаче: web1 и web2. Web1 работает на https (firma.ru, установлен сертификат letsencrypt), web2 - http. Соответственно перед ними стоит nginx reverse proxy. Для web1 на nginx выпущен и загружен второй сертификат letsencrypt (firma.ru). »

А зачем два раза сертификат? Куда ваш домен привязан? На Apache web1 или на nginx?

Я бы сделал оба Апача на http без всяких сертификатов, домен привязал бы к IP nginx и использовал бы его в качестве load balancer с этими двумя Апачами в качестве бекендов https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

Или вам не это нужно? Тогда я не понял задачу.

YDen
27-11-2023, 20:51
А зачем два раза сертификат? Куда ваш домен привязан? На Apache web1 или на nginx? »
Два субдомена (d1.firma.ru - web1 и d2.firma.ru - web2), привязаны к nginx.
Два раза сертификат - изначально работал один сервер, web1, без обратного прокси. Когда появилась необходимость в web2, то не стал ломать "работает-не трожь". Хочу с правильной работой nginx разобраться, а потом уже с web1 убрать https.
web1 и web2 совершенно разные сервера, балансировать нагрузку не зачем.

Цель: за обратным прокси расположить несколько разных серверов. Со схемами https -> https и https -> http.

благодарю

shisik
27-11-2023, 22:21
Ну со вторым всё просто: создаёте виртуальный хост в nginx на d2.firma.ru и указываете его ip в proxy_pass. У меня это обычно вот так:


location / {
proxy_pass http://10.12.0.245:9090;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect off;
}


Потом устанавливаете на него сертификат для d2.firma.ru как обычно. На nginx, само собой. В принципе здесь всё.

Первый я бы настроил точно так. Не знаю, будет ли вообще работать по https между nginx и Apache. Если IP указать, то точно не будет сертификат приниматься. Ну может там другой домен какой - не знаю, тогда может и будет. Но я так никогда не делал.

А куда у вас основной домен смотрит? А то судя по конфигурации из первого собщения он сам на себя замыкается: принимает запросы на firma.ru и отправляет на себя же?

YDen
28-11-2023, 06:24
А куда у вас основной домен смотрит? А то судя по конфигурации из первого собщения он сам на себя замыкается: принимает запросы на firma.ru и отправляет на себя же? »

Благодарю за информацию.
Основной домен, firma.ru, я не использую пока. В конфиге его указал для простоты.
Сайт web1, тот что d1.firma.ru работает под конфигом nginx, ниже. В web1 в апаче прописано, что он отвечает на https://d1.firma.ru - поэтому в proxy_pass указан опять этот адрес.


server {
listen 80;
listen [::]:80;
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name d1.firma.ru;

ssl_certificate "/etc/letsencrypt/live/d1.firma.ru/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/d1.firma.ru/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;

proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;

location / {
proxy_pass https://d1.firma.ru/;
}
}


Еще раз благодарю.

shisik
28-11-2023, 16:36
Сайт web1, тот что d1.firma.ru работает под конфигом nginx, ниже. В web1 в апаче прописано, что он отвечает на https://d1.firma.ru - поэтому в proxy_pass указан опять этот адрес. »

Что-то я не понял. А на какой IP смотрит d1.firma.ru? На web1 с Апачем, или на сервер с nginx? Как они оба могут на него отзываться?
Может у вас этот сайт потому и работает, что он на Апач настроен, а nginx просто не участвует? И вы видите рабочий сайт, но чисто с Апача.

Можете посмотреть Response Headers в браузере на вкладке Network, там есть поле Server и если ответ от nginx, то там будет nginx и версия. Ну и то жесамое для Апача - будет Apache.

YDen
28-11-2023, 16:57
Что-то я не понял. А на какой IP смотрит d1.firma.ru? На web1 с Апачем, или на сервер с nginx? Как они оба могут на него отзываться?
Может у вас этот сайт потому и работает, что он на Апач настроен, а nginx просто не участвует? И вы видите рабочий сайт, но чисто с Апача. »

Внешний ip смотрит на nginx. Если быть точнее, то микротик дст натит на nginx. Сегодня с экспериментами сервер с nginx (виртуалка proxmox с ubuntu server) в аут ушел. Сайт d1.firma.ru стал недоступен, ошибка 502, nginx.

shisik
28-11-2023, 17:58
Тогда непонятно как может работать вот это

proxy_pass https://d1.firma.ru/;

Как nginx узнает, что надо на Апач запросы отправлять? d1.firma.ru указывает на него самого. Где вообще указан адрес Апача с web1?




© OSzone.net 2001-2012