Краткое описание: Руководство по установке и настройке Nginx reverse proxy на CentOS, настройка nginx ssl, virtual host, https redirect. Пример работы Nginx и Apache.

Нужна консультация или помощь в решении IT вопроса?

В качестве операционной системы может выступать другая Linux система, последовательность в настройке и её содержимое абсолютно одинаковое.

Зачем нужен Reverse proxy

После развертывая последнего сервиса на популярных портах 80 и 443, следующим шагом была оптимизация «белых» ip. Постановка задачи звучит очень просто: множество внешних доменных имен должны работать через один белый ip. Итак, за доменными именами находятся web-сервисы: месседжер RocketChat(CentOS+Nginx), облачный сервис NextCloud+CollaboraOffice(Ubuntu+LAMP) и почтовый сервер Mdaemon(Windows). Схематически:

Настройка Nginx reverse proxy, схема сети

Nginx или Apache

Текущая конфигурация как ни какая другая использует положительные стороны обоих web серверов: Nginx выступает как reverse proxy и его принято называть frontend, а Apache запущен на конечном web сервере, который именуется как backend. Такая последовательность в обработке запросов исходит из положительных сторон: Nginx быстро обрабатывает входящие динамические запросы, а Apache как ни кто другой имеет множество модулей для работы с PHP и хорошо справляется с выдачей статических объектов.

Настройка Nginx

Пример с настройкой Nginx будет включать самый распространённый случай, когда backend это LAMP с каким-то сайтом. Конфигурация Nginx содержит блок https, SSL сертификат которого уже был заранее выдан.

Обновление CentOS и добавление репозитория epel

yum -y install epel-release nano && yum -y update

установка Nginx

yum install nginx
mkdir /etc/nginx/{sites-available,sites-enabled,ssl}

адаптация конфигурацию nginx

nano /etc/nginx/nginx.conf

добавить в директиву http

include /etc/nginx/sites-enabled/*.conf;

и комментируем блок server. Настройка Nginx virtual host сводится к определению конфигурационных файлов

nano /etc/nginx/sites-available/disk.topnet.conf
# Redirect Options
server {
listen 80;
server_name disk.topnet.com.ua;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
# SSL config
ssl on;
ssl_certificate /etc/nginx/ssl/disk.topnet.com.ua/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/disk.topnet.com.ua/privkey.pem;
server_name disk.topnet.com.ua;
set $upstream 192.168.5.250;
location / {
proxy_pass_header Authorization;
proxy_pass https://$upstream;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_buffering off;
client_max_body_size 0;
proxy_read_timeout 36000s;
proxy_redirect off;
proxy_ssl_session_reuse off;
}
}

создание символьный ссылки

ln -s /etc/nginx/sites-available/disk.topnet.conf /etc/nginx/sites-enabled/

проверка конфигурации Nginx

nginx -t
systemctl start nginx
systemctl enable nginx

добавлений правил FireWall в CentOS

firewall-cmd --add-service=http
firewall-cmd --add-service=https
firewall-cmd --runtime-to-permanent

Nginx, запрет доступа по IP

Если не добавить эту конфигурацию, то при попытке доступа через IP адрес будет открывать один из сайтов, при этом с предупреждением того, что в сертификате указано другое имя. Это событие явно лишнее. Для исправление нужно создать отдельную конфигурацию Nginx, в которой указать возврат ошибки 404, при попытке запроса страницы по IP адресу.

nano /etc/nginx/sites-available/ip.conf
server {
listen 80;
server_name 194.54.162.250 192.168.5.254;
return 404;
}
ln -s /etc/nginx/sites-available/ip.conf /etc/nginx/sites-enabled/
nginx -t
systemctl restart nginx

пример отработки конфигурации
Настройка Nginx, запрет доступа по IP

Задача, которая решалась в прошлом году покупкой недешевого Mikrotik-а, выделением 4-ех ip(по 3-ем линкам WAN!), имеет простое решение — немножко времени+Nginx.

Если у вас есть профессиональный интерес в расширении данной статьи — заполните форму запроса.