Настройка доступа к сайту, находящегося за NAT и проксирующим nGinx

Author Автор: Роман Чернышов    Опубликовано: 20 августа 2024

Друзья, всем привет! Решил поделиться небольшой заметкой, в первую очередь для себя(чтобы не забыть, так как иногда приходится реализовывать нечто подобное, но к сожалению не так часто, чтобы помнить детали), а во вторых — может кому-то данная информация пригодится.

И так, задача: настроить доступ к сайту, который размещен на сервере(условно назовем его №2), который в свою очередь стоит за другим сервером(условно назовем его №1), являющимся прокси(перенаправляет трафик через nGinx), и который при этом стоит за NAT(настроенном на роутере).

Дано:

1. Роутер IP 10.0.0.1
2. Сервер №1 IP 10.0.0.2
2. Сервер №2 IP 10.0.0.3

Решение: С NAT все понятно, тут просто настраиваем проброс портов 80 и 443 (для HTTPS), то для проксирования трафика через nGinx, на Сервере №1(следом идущим за NAT), нужно должным образом настроить nGinx. Для этого создаем конфигурационный файл следующего содержания:

# Для каждого домена
server {
    listen  10.0.0.2:80;
    listen  10.0.0.2:443;
    server_name  ДОМЕН.ru www.ДОМЕН.ru;
 
    # Цепляем сертификаты.
    # В случае с Lets Encrypt где осуществляется авто-перевыпуск, следим за их актуальностью
    ssl                        on;
    ssl_certificate      /etc/nginx/ssl/ДОМЕН.ru.crt;
    ssl_certificate_key  /etc/nginx/ssl/ДОМЕН.ru.key;
 
    location / {
    	# Следим чтобы не передавались лишние заголовки которые 
    	# может не принять конечный сервер, чревато Вad request 400
 
	    proxy_pass $scheme://10.0.0.3$request_uri;
	    proxy_redirect off;
	    proxy_set_header   Host $http_host;
	    proxy_set_header   X-Real-IP $remote_addr;
	    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
	    proxy_pass_header       Set-Cookie;
    }
}

Для доступа к сайту по HTTPS. Настройка nGinx Сервера №2, стандартным образом с созданием Lets Encrypt SSL сертификатов и копированием их на Сервера №1, в директорию /etc/nginx/ssl/, с прописыванием путей на них в конфиге nGinx Сервера №1.

При смене настроек SSL домена на Сервера №2, копируем сертификаты для домена на Сервера №2 (на которые ссылается nGinx, при проксировании трафика). Другого варианта нет. Прочие ухищрения проксировать трафик Сервером №1 без использования SSL сертификатов созданных на Сервере №2, это по сути попытка реализации вмешательства в цепочку передачи данных, типа MITM.

При автоматическом перевыпуске Lets Encrypt SSL на Сервере №2, обновляем сертификаты на Сервер №1. Для этого пишем PHP или Python скрипт(назовем его скриптом синхронизации, позже выложу код) и создаем задачу в CRON, для проверки актуальности сертификатов. Если на сервере используется панель управления типа ISPManager, Fastpanel, BrainyCP и т.д., то также можно написать для них мод, который в случае изменения настроек SSL для домена, будет актуализировать настройки nGinx Сервера №1.

Скрипт синхронизации должен иметь доступ к обоим серверам по SSH, уметь заливать актуальные SSL и перезапускать nGinx на Сервер №1.

На этом пока всё…

Оставить комментарий

Автор блога
Роман Чернышов
Веб-разработчик,
Full Stack
Senior, Architect
PHP, JavaScript, Node.JS, Python, HTML 5, CSS 3, MySQL, Bash, Linux Admin
Заказать работу
предложить оффер

Моя книга
Книга. Веб-разработчик. Легкий вход в профессию
Печатная книга
Веб-разработчик.
Легкий вход в профессию
Купить за 359₽
Популярные записи
Последние вопросы
Список вопросов
Последние комментарии
Меню

Archive

Мои проекты
Insurance CMS Love Crm CMS Совместные покупки Мой PHP Framework Хостинг для моих клиентов Лицензии на мой софт и поддержка