Настройка доступа к сайту, находящегося за NAT и проксирующим nGinx
Друзья, всем привет! Решил поделиться небольшой заметкой, в первую очередь для себя(чтобы не забыть, так как иногда приходится реализовывать нечто подобное, но к сожалению не так часто, чтобы помнить детали), а во вторых — может кому-то данная информация пригодится.
И так, задача: настроить доступ к сайту, который размещен на сервере(условно назовем его №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.
На этом пока всё…

Автор:






