Краткое описание: Руководство по установке и настройке Nginx reverse proxy на CentOS, настройка nginx ssl, virtual host, https redirect. Пример работы Nginx и Apache.
Поддержи автора статьи, просмотри рекламу ↓↓↓
В качестве операционной системы может выступать другая Linux система, последовательность в настройке и её содержимое абсолютно одинаковое.
Зачем нужен Reverse proxy
После развертывая последнего сервиса на популярных портах 80 и 443, следующим шагом была оптимизация «белых» ip. Постановка задачи звучит очень просто: множество внешних доменных имен должны работать через один белый ip. Итак, за доменными именами находятся web-сервисы: месседжер RocketChat(CentOS+Nginx), облачный сервис NextCloud+CollaboraOffice(Ubuntu+LAMP) и почтовый сервер Mdaemon(Windows). Схематически:
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
пример отработки конфигурации
Задача, которая решалась в прошлом году покупкой недешевого Mikrotik-а, выделением 4-ех ip(по 3-ем линкам WAN!), имеет простое решение — немножко времени+Nginx.
Не работает запрет доступа по IP. Все также открывается. По https
Так-то у автора тоже не работает, он в конфиге возвращает 404, а в скрине 502… ай-яй-яй…