Налаштування зворотного проксі
09:41, 25.11.2022
Зворотний проксі-сервер – різновид проксі-сервера, що транслює клієнтські запити із зовнішньої мережі на один або кілька серверів, розташованих у межах внутрішньої мережі. Далі в статті ми розповімо, для чого він потрібен і як його налаштувати за потреби на прикладі веб-сервера Nginx.
Навіщо потрібен зворотний проксі
Сценаріїв використання технології може бути кілька. Розглянемо основні:
- Приховування існування опитуваних ним серверів, а також їхніх характеристик.
- Захист від DoS і DDoS – для цього у зв'язці зі зворотним проксі системні адміністратори ставлять програмний брандмауер.
- Як милицю – якщо на основному сайті відсутня підтримка підключення через SSL, можна підключити зворотний проксі-сервер із наявністю апаратного SSL-прискорювача.
- Використання як балансувальник навантажень – такий сервер може забезпечити рівномірний розподіл навантаження між двома, трьома і більше серверами.
- Зниження навантаження на основний сервер завдяки розміщенню на зворотному проксі динамічного і статичного вмісту сайту. Цей метод часто називають акселерацією.
- Компресія даних з метою скорочення часу завантаження.
- Може застосовуватися для безпечного і зручного A/B-тестування.
Тепер ви знаєте, для чого потрібен зворотний проксі. Перейдемо до практики.
Використання Nginx як зворотного проксі-сервера
Насамперед відкривайте файл конфігурації блоку сервера домену. У ньому необхідно вказати розташування і проксі-сервер:
server { listen 80; server_name www.example.com example.com; location /app { proxy_pass http://127.0.0.1:7070; } }
URL сервера, який потрібно проксирувати, встановлюють із proxy_pass директиви proxy_pass. Це дає змогу використовувати HTTP або HTTPS:
- як протокол;
- домену;
- IP-адреси;
- необов'язкового порту;
- уніфікованого ідентифікатора ресурсу як адреси.
Представлена вище конфігурація дає команду Nginx пересилати всі запити в /app проксі-серверу за адресою http://127.0.0.1:7070. Ви можете поміняти на потрібний вам айпі. Надано тільки заради ознайомлення.
Файли з серверними блоками зберігаються в каталозі /etc/nginx/sites-available – якщо ви користуєтеся Ubuntu або Debian, а також у /etc/nginx/conf.d, якщо використовуєте CentOS.
Для наочної ілюстрації роботи proxy_pass директиви location і proxy_pass розглянемо простий приклад:
server { listen 80; server_name www.example.com example.com; location /blog { proxy_pass http://node1.com:6000/wordpress/; } }
Коли відвідувач сайту звернеться до http://example.com/blog/my-post, веб-сервер Nginx ретранслює цей запит через проксі на http://node1.com:6000/wordpress/my-post.
Якщо адреса сервера, що проксірується, містить уніфікований ідентифікатор ресурсу, ( /wordpress/ ), URI запиту, що транслюється на сервер, що проксірується, замінюється на URI, що вказано в директиві. У разі, коли адреса проксі-сервера вказана без уніфікованого ідентифікатора ресурсу, повний URI запиту передається на проксі-сервер.
Як налаштувати Nginx як зворотний проксі для проксі-сервера без HTTP
Для цього використовується одна з чотирьох директив:
- fastcgi_pass – зворотний проксі до сервера FastCGI.
- uwsgi_pass – зворотний проксі до сервера uwsgi.
- scgi_pass – зворотний проксі до сервера SCGI.
- memcached_pass – зворотний проксі до сервера Memcached.
Наприклад, дуже часто Nginx використовують як зворотний проксі-сервер PHP-FPM:
server { # ... other directives location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } }
При зміні файлу конфігурації обов'язково перезапускайте веб-сервер Nginx, щоб зміни набули чинності. Якщо залишилися питання, звертайтеся до наших фахівців через лайв чат.