Повний посібник з налаштування зворотного проксі-сервера Nginx для Ubuntu 22.04

Сучасні веб-додатки рідко працюють як автономні сервери, безпосередньо підключені до Інтернету. Натомість вони спираються на складні архітектурні моделі, що підвищують безпеку, продуктивність і масштабованість. Налаштування зворотного проксі-сервера nginx є одним із найважливіших компонентів цієї архітектури, виступаючи проміжним шаром між запитами клієнтів і серверами додатків бекенду.

Цей вичерпний гайд демонструє, як реалізувати надійне налаштування зворотного проксі-сервера nginx в Ubuntu 22.04, охоплюючи процедури встановлення, кращі практики налаштування, міркування безпеки та практичні методи тестування. Незалежно від того, розгортаєте ви застосунки на Node.js, сервіси на Python Flask чи будь-яку іншу бекенд-технологію, розуміння принципів реалізації зворотного проксі є критично важливим для продакшн-розгортання.

Чому варто вибрати зворотний проксі-сервер Nginx для ваших додатків?

Зворотний проксі — це проміжний сервер, який пересилає запити клієнтів до серверних додатків і повертає відповіді користувачам. На відміну від прямих проксі, які діють від імені клієнтів, зворотні проксі діють від імені серверів, утворюючи захисний шар між Інтернетом і вашою інфраструктурою.

Архітектура зворотного проксі nginx має низку переваг порівняно з прямим підключенням серверів додатків. Вона підвищує безпеку, приховуючи деталі серверної частини, централізуючи SSL-термінацію та слугуючи єдиним контрольним пунктом брандмауера. Переваги в плані продуктивності включають балансування навантаження, кешування статичного контенту та об'єднання підключень, що зменшує навантаження на сервер і пришвидшує час відгуку.

З операційної точки зору, це спрощує управління сертифікатами, централізує ведення журналів і оптимізує обслуговування. З точки зору клієнта, комунікація здається прямою, але зворотний проксі прозоро пересилає запити та відповіді, зберігаючи ізоляцію бекенду.

Зазвичай сервери додатків прив'язуються до портів localhost, обмежуючи доступ з міркувань безпеки. У виробництві налаштування зворотного проксі підтримують цю ізоляцію, забезпечуючи доступність Інтернету.

Крім того, екземпляри зворотного проксі nginx забезпечують розширену маршрутизацію, розподіляючи запити між серверами за шаблонами URL, заголовками або алгоритмами. Це робить їх незамінними для мікросервісної архітектури та складних продакшн-розгортань.

Системні вимоги та підготовка середовища

Перед впровадженням конфігурації зворотного проксі-сервера nginx переконайтеся, що ваша система Ubuntu 22.04 відповідає необхідним вимогам і має відповідні конфігурації безпеки. Ця підготовча фаза запобігає типовим проблемам з інсталяцією та створює міцну основу для розгортання зворотного проксі-сервера.

Ваша система потребує адміністративних привілеїв, зазвичай через обліковий запис користувача з правами sudo, але без доступу root. Це рекомендована практика безпеки, яка запобігає випадковим змінам у системі та водночас зберігає можливість виконувати необхідні інсталяційні дії. Переконайтеся, що ваш обліковий запис має привілеї sudo, виконавши адміністративні команди з префіксом sudo.

Конфігурація мережі відіграє вирішальну роль у функціонуванні зворотного проксі-сервера. Переконайтеся, що ваш сервер має стабільне підключення до Інтернету та правильно налаштовані параметри DNS. Якщо ви використовуєте доменне ім'я для зворотного проксі-сервера, переконайтеся, що записи DNS вказують на публічну IP-адресу вашого сервера. Ця конфігурація забезпечує належне отримання SSL-сертифіката та доступ зовнішніх клієнтів.

Конфігурація брандмауера вимагає ретельної уваги, щоб забезпечити належний потік трафіку, зберігаючи при цьому безпеку. Ubuntu 22.04 зазвичай використовує UFW (Uncomplicated Firewall) для базового управління брандмауером. Перегляньте свої поточні правила брандмауера і підготуйтеся додати винятки для трафіку HTTP і HTTPS, якщо це необхідно, протягом процесу конфігурації.

Перед початком процесу інсталяції слід застосувати оновлення системи. Застарілі пакети можуть спричинити проблеми сумісності або вразливості безпеки. Оновіть кеш репозиторію пакетів і встановіть доступні оновлення системи за допомогою менеджера пакетів APT, перш ніж продовжувати інсталяцію Nginx.

Як налаштувати зворотний проксі-сервер Nginx на Ubuntu 22.04?

Встановлення Nginx на Ubuntu 22.04 використовує стандартні репозиторії пакетів дистрибутива, забезпечуючи сумісність і безпеку завдяки офіційному управлінню пакетами. Цей підхід забезпечує автоматичні оновлення безпеки та спрощене обслуговування порівняно з ручною компіляцією або сторонніми репозиторіями.

Почніть з оновлення кешу локального репозиторію пакетів, щоб забезпечити доступ до останніх доступних версій пакетів:

sudo apt update

Встановіть Nginx за допомогою менеджера пакетів APT:

sudo apt install nginx

Процес інсталяції зазвичай завершується за кілька хвилин, залежно від швидкості інтернет-з'єднання та продуктивності системи. Прийміть усі запити на підтвердження інсталяції та перезапустіть служби за потреби.

Налаштуйте брандмауер, щоб дозволити HTTP-трафік через Nginx. UFW в Ubuntu надає попередньо визначені профілі додатків, які спрощують типові сценарії налаштування:

sudo ufw allow 'Nginx HTTP'

Ця команда вмикає вхідний HTTP-трафік на порту 80, який Nginx використовує для стандартних веб-запитів. Якщо ви плануєте пізніше впровадити шифрування SSL/TLS, вам також може знадобитися дозволити HTTPS-трафік за допомогою профілю «Nginx HTTPS».

Перевірте стан встановлення та запуску Nginx за допомогою systemctl:

systemctl status nginx

Вихідні дані повинні вказувати, що Nginx активний і працює. Зазвичай служба запускається автоматично після встановлення і налаштовується на автоматичний запуск під час завантаження системи.

Розуміння структури каталогів Nginx допомагає в управлінні конфігурацією та усуненні несправностей. Основний файл конфігурації знаходиться в /etc/nginx/nginx.conf, тоді як конфігурації для конкретних сайтів зазвичай розміщуються в /etc/nginx/sites-available/ із символічними посиланнями в /etc/nginx/sites-enabled/ для активних конфігурацій.

Створення власних конфігурацій блоків сервера

Професійні продакшн-розгортання nginx reverse proxy використовують власні конфігурації блоків сервера, а не модифікують стандартні налаштування. Такий підхід підтримує чистоту системи, спрощує усунення несправностей і полегшує управління конфігурацією на декількох сайтах або в декількох додатках.

Створіть новий файл конфігурації для налаштувань зворотного проксі-сервера, специфічних для вашого домену. Замініть «your_domain» на ваше фактичне ім'я домену протягом усього процесу:

sudo nano /etc/nginx/sites-available/your_domain

Основна конфігурація nginx reverse proxy example включає кілька основних директив, які визначають поведінку сервера, обробку клієнтів та переадресацію бекенду:

server {

listen 80;

listen [::]:80;

server_name your_domain www.your_domain;

location / {

proxy_pass http://127.0.0.1:8000;

include proxy_params;

}

}

Ця конфігурація створює блок сервера, який відповідає на запити до вашого домену як на інтерфейсах IPv4, так і на інтерфейсах IPv6. Директиви listen вказують, що Nginx повинен приймати з'єднання на порту 80, стандартному порту HTTP. Директива server_name визначає, які імена хостів обробляє цей блок сервера.

Блок location визначає, як Nginx обробляє запити для різних шляхів URL. Кореневе розташування (/) перехоплює всі запити, які не відповідають більш конкретним блокам location. Директива nginx proxy pass пересилає запити на ваш сервер додатків, що працює на порту 8000 localhost.

Включення proxy_params забезпечує необхідну функціональність пересилання заголовків, яка зберігає інформацію про клієнта протягом усього процесу проксі. Цей файл містить попередньо визначені налаштування заголовків, які потрібні для більшості конфігурацій зворотного проксі.

Розширене пересилання заголовків і збереження інформації про клієнта

Ефективна реалізація зворотного проксі вимагає ретельного поводження з заголовками HTTP для збереження інформації про клієнта та забезпечення сумісності додатків. Файл proxy_params забезпечує стандартизоване пересилання заголовків, яке відповідає загальним вимогам і усуває потенційні проблеми.

Розуміння заголовків, що пересилаються proxy_params, допомагає у вирішенні проблем і налаштуванні вимог до конфігурації:

Збереження заголовка Host гарантує, що серверні додатки отримують оригінальне доменне ім'я, яке запитують клієнти. Ця інформація є надзвичайно важливою для додатків, які генерують URL-адреси, обробляють віртуальний хостинг або реалізують логіку на основі доменів.

Обробка заголовка X-Forwarded-For зберігає інформацію про IP-адресу клієнта у всьому ланцюжку проксі. Цей заголовок може містити кілька IP-адрес, коли запити проходять через кілька проксі-серверів, причому оригінальна IP-адреса клієнта вказана першою.

Заголовок X-Real-IP є спрощеною альтернативою X-Forwarded-For, оскільки містить тільки безпосередню IP-адресу клієнта. Додатки, яким потрібні окремі IP-адреси для реєстрації або контролю доступу, зазвичай віддають перевагу цьому заголовку, а не потенційно складному ланцюжку X-Forwarded-For.

Заголовок X-Forwarded-Proto вказує оригінальний протокол (HTTP або HTTPS), який використовує клієнт. Ця інформація допомагає серверним додаткам визначити відповідне форматування відповіді, налаштування безпеки та поведінку перенаправлення.

Файл proxy_params містить такі стандартні налаштування:

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_set_header X-Forwarded-Proto $scheme;

Для користувацьких додатків можуть знадобитися додаткові заголовки або змінена поведінка переадресації. Розуміння цих стандартних заголовків є основою для реалізації користувацької переадресації заголовків за потреби.

Як завершити та протестувати налаштування проксі-сервера Nginx

Після створення конфігурації блоку сервера необхідно активувати її, створивши символічне посилання в каталозі sites-enabled. Такий підхід дозволяє зберігати конфігурації в sites-available, вибірково активуючи їх за допомогою символічних посилань.

Створіть символічне посилання, щоб активувати конфігурацію:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Перевірте синтаксис конфігурації перед перезапуском Nginx, щоб виявити будь-які синтаксичні помилки або проблеми з конфігурацією:

sudo nginx -t

Ця команда перевіряє ваші конфігураційні файли та повідомляє про будь-які помилки або попередження. Виправте всі проблеми, перш ніж продовжувати, щоб уникнути перебоїв у роботі служби.

Перезапустіть Nginx, щоб застосувати нову конфігурацію:

sudo systemctl restart nginx

Ваш зворотний проксі-сервер nginx тепер налаштований і готовий до переадресації запитів на ваш сервер бекенд-додатків. Якщо ваш бекенд-додаток працює і доступний за налаштованою адресою та портом, ви повинні мати можливість отримати до нього доступ через ваше доменне ім'я.

Налаштування тестової програми за допомогою Gunicorn

Для тестування або якщо у вас немає готової серверної програми, ви можете створити просту тестову програму за допомогою Gunicorn, популярного Python WSGI HTTP-сервера, який зазвичай використовується з конфігураціями зворотного проксі-сервера nginx.

Встановіть Gunicorn через репозиторії пакетів Ubuntu:

sudo apt update

sudo apt install gunicorn

Створіть мінімальну програму Python WSGI для тестування:

nano test.py

Додайте наступний код Python, щоб створити базову веб-програму:

def app(environ, start_response):

start_response("200 OK", [])

return iter([b"Hello, World!"])

Ця мінімальна програма WSGI відповідає на всі запити простим повідомленням «Hello, World!». Хоча вона є базовою, вона надає достатню функціональність для тестування конфігурації зворотного проксі-сервера.

Запустіть сервер Gunicorn із вашою тестовою програмою:

gunicorn --workers=2 test:app

Gunicorn запуститься і буде слухати на адресі за замовчуванням http://127.0.0.1:8000, яка відповідає директиві proxy_pass у вашій конфігурації зворотного проксі-сервера nginx. Сервер відобразить інформацію про запуск і продовжить роботу у вашому терміналі.

Перевірка функціональності зворотного проксі-сервера

Коли Nginx і ваш бекенд працюють, протестуйте налаштування, відвідавши ваш домен у браузері. Якщо все налаштовано правильно, відповідь бекенда з'явиться через зворотний проксі.

Nginx слухає на порту 80, пересилає запити до програми на порту 8000, отримує відповідь і відправляє її назад клієнту.

Цей процес демонструє ключову перевагу зворотного проксі: програма залишається ізольованою на localhost, але при цьому залишається доступною для інтернет-клієнтів.

Які найкращі практики для зміцнення розгортання зворотного проксі Nginx?

Впровадження налаштування зворотного проксі nginx у виробництві вимагає додаткових заходів безпеки, крім базової функціональності. Ці заходи захищають як зворотний проксі, так і бекенд-додатки від поширених загроз безпеки.

Регулярні оновлення безпеки як для Nginx, так і для базової системи Ubuntu допомагають запобігти використанню відомих вразливостей. Увімкніть автоматичні оновлення безпеки, де це доречно, і стежте за повідомленнями про безпеку для програмних компонентів у вашому стеку.

Реєстрація доступу забезпечує видимість запитів клієнтів і потенційних загроз безпеці. Налаштуйте журнали доступу Nginx для збору відповідної інформації, збалансувавши розмір журналу та вимоги до зберігання.

Обмеження швидкості допомагає запобігти атакам типу «відмова в обслуговуванні» та зловживанням клієнтів. Nginx надає вбудовані можливості обмеження швидкості, які можуть захистити бек-енд додатки від надмірного обсягу запитів.

Для виробничих розгортань слід впровадити шифрування SSL/TLS. Хоча цей посібник зосереджується на базовій конфігурації HTTP, виробничі системи повинні використовувати HTTPS з правильно налаштованими сертифікатами SSL.

Конфігурація брандмауера повинна обмежувати доступ до серверів бек-енд-додатків. Тільки зворотний проксі-сервер повинен мати доступ до бек-енд-сервісів, запобігаючи прямому доступу до серверів додатків через Інтернет.

Яку роль відіграють оптимізація та моніторинг у розгортанні зворотного проксі-сервера?

Розгортання зворотного проксі-сервера в виробничому середовищі вимагає оптимізації продуктивності та моніторингу для забезпечення ефективності та

Пул з'єднань і keepalive зменшують навантаження між Nginx і серверами бекенду, покращуючи час відгуку під час великого навантаження. Кешування дозволяє обслуговувати статичні ресурси та динамічний контент, що піддається кешуванню, безпосередньо з проксі, зменшуючи використання бекенду.

Моніторинг і оповіщення виявляють проблеми, перш ніж вони вплинуть на користувачів, використовуючи журнали, метрики та перевірки стану для оперативного аналізу. Балансування навантаження розподіляє запити між декількома бекендами, забезпечуючи високу доступність і горизонтальне масштабування.

Висновок

Успішна реалізація зворотного проксі-сервера nginx створює міцну основу для виробничих веб-додатків. Ця конфігурація забезпечує ізоляцію безпеки, переваги в продуктивності та оперативну гнучкість, зберігаючи прозору комунікацію з клієнтами.

Модель зворотного проксі-сервера стала необхідною для сучасної архітектури веб-додатків. Розуміння її реалізації, конфігурації та обслуговування дозволяє створювати масштабовані, безпечні та підтримувані веб-сервіси, які можуть рости разом з вимогами вашого додатка.

Залиште свої відгуки

Поділіться своїми думками та допоможіть нам покращитися! Ваш відгук важливий для нас.

Завантажте своє фото