Як налаштувати reverse proxy на VPS?
У цій детальній статті ми, як досвідчені системні адміністратори, поділимося знаннями про налаштування reverse proxy на вашому віртуальному приватному сервері (VPS хостинг). Reverse proxy – це потужний інструмент, який дозволяє покращити безпеку, продуктивність та керованість ваших веб-застосунків. Ми розглянемо процес встановлення та налаштування reverse proxy з використанням Nginx, одного з найпопулярніших і надійних веб-серверів, який часто використовується як reverse proxy. Ви дізнаєтеся, як маршрутизувати трафік, налаштовувати SSL/TLS, кешувати контент і багато іншого. Ця стаття буде корисна як початківцям, так і досвідченим користувачам, які прагнуть оптимізувати роботу своїх веб-серверів. Розпочнемо!Зміст:
- Що таке reverse proxy і навіщо він потрібен?
- Вибір інструменту: Nginx
- Встановлення та налаштування Nginx
- Конфігурація reverse proxy
- Безпека: SSL/TLS
- Моніторинг і усунення несправностей
Що таке reverse proxy і навіщо він потрібен?

Reverse proxy – це сервер, який виступає як посередник між клієнтами та одним або кількома back-end серверами. Клієнт відправляє запит reverse proxy, який потім перенаправляє цей запит на відповідний back-end сервер. Відповідь back-end сервера повертається reverse proxy, який потім відправляє її клієнту. З точки зору клієнта, він взаємодіє лише з reverse proxy, не знаючи про існування back-end серверів. Це забезпечує декілька важливих переваг.
- Безпека: Reverse proxy приховує структуру вашої внутрішньої мережі, не розкриваючи IP-адреси back-end серверів. Це ускладнює зловмисникам отримання інформації про вашу інфраструктуру. Він також може виступати як фільтр, блокуючи шкідливі запити та захищаючи back-end сервери від DDoS-атак.
- Балансування навантаження: Reverse proxy може розподіляти вхідний трафік між декількома back-end серверами, запобігаючи перевантаженню одного сервера та забезпечуючи високу доступність вашого застосунку.
- Кешування: Reverse proxy може кешувати статичний контент, такий як зображення, CSS і JavaScript файли, що зменшує навантаження на back-end сервери та прискорює завантаження сторінок для користувачів.
- SSL/TLS шифрування: Reverse proxy може обробляти SSL/TLS шифрування, звільняючи back-end сервери від цієї ресурсомісткої задачі. Це також дозволяє централізовано керувати SSL/TLS сертифікатами.
- Спрощення управління: Reverse proxy спрощує управління веб-застосунками, дозволяючи змінювати конфігурацію back-end серверів без необхідності вносити зміни на стороні клієнта.
Уявіть, що у вас є інтернет-магазин. У вас є декілька серверів, які обробляють запити користувачів, обробляють платежі та керують базою даних. Без reverse proxy, кожен користувач напряму підключається до одного з цих серверів. Якщо один сервер перевантажений, це може призвести до сповільнення роботи сайту або навіть до його недоступності. З reverse proxy, всі користувачі підключаються до reverse proxy сервера, який потім розподіляє запити між доступними серверами. Якщо один сервер виходить з ладу, reverse proxy автоматично перенаправляє запити на інші сервери, забезпечуючи безперервну роботу сайту.
Приклад команди для перевірки доступності сервера:
ping 192.168.1.10
Ця команда відправить ICMP ехо-запити на сервер з IP-адресою 192.168.1.10. Якщо сервер доступний, ви побачите відповіді від нього. Якщо сервер недоступний, ви побачите повідомлення про помилку.
Приклад команди для перевірки мережевих з'єднань:
netstat -tulnp
Ця команда відобразить список всіх активних мережевих з'єднань на вашому сервері, включаючи протокол, локальну адресу, віддалену адресу, стан і PID процесу, який використовує з'єднання. Це корисно для визначення того, які порти відкриті і які процеси їх використовують.
Приклад команди для перевірки маршрутів:
route -n
Ця команда відобразить таблицю маршрутизації ядра. Це корисно для визначення того, як трафік направляється з вашого сервера на інші мережі.
Reverse proxy – це ключовий елемент сучасної веб-інфраструктури, що дозволяє підвищити безпеку та продуктивність веб-застосунків.
John Doe, Senior System Administrator
Приклад: Припустимо, у вас є два веб-сервери: webserver1.example.com (192.168.1.10) та webserver2.example.com (192.168.1.11). Ваш reverse proxy матиме зовнішню IP-адресу 203.0.113.10. Коли користувач намагається отримати доступ до www.example.com, запит спочатку надходить на reverse proxy (203.0.113.10), який потім перенаправляє його на один з веб-серверів (наприклад, webserver1.example.com). Користувач отримує відповідь від webserver1.example.com, але з його точки зору він спілкується безпосередньо з www.example.com.
Вибір інструменту: Nginx

Nginx - це високопродуктивний веб-сервер і reverse proxy, відомий своєю ефективністю, стабільністю і гнучкістю. Він може обробляти тисячі одночасних з'єднань і споживає відносно мало ресурсів. Nginx є чудовим вибором для використання в якості reverse proxy з кількох причин:
- Висока продуктивність: Nginx розроблений для обробки великої кількості одночасних з'єднань з мінімальними затримками.
- Гнучкість: Nginx пропонує широкий спектр налаштувань і модулів, що дозволяють адаптувати його до різних завдань.
- Простота конфігурації: Nginx має зрозумілий і логічний синтаксис конфігурації.
- Підтримка SSL/TLS: Nginx надає відмінну підтримку SSL/TLS шифрування, дозволяючи забезпечити безпечне з'єднання між клієнтом і сервером.
- Кешування: Nginx може кешувати статичний і динамічний контент, що значно покращує продуктивність веб-застосунків.
Існують й інші альтернативи, такі як Apache, але Nginx часто перевершує Apache за продуктивністю, особливо в сценаріях з великою кількістю одночасних з'єднань. Крім того, конфігурація Nginx часто вважається простішою і зрозумілішою, ніж конфігурація Apache.
| Функція | Nginx | Apache |
|---|---|---|
| Продуктивність (конкурентні з'єднання) | Висока | Середня |
| Використання ресурсів | Низьке | Високе |
| Конфігурація | Відносно проста | Більш складна |
| Підтримка SSL/TLS | Відмінна | Хороша |
| Кешування | Відмінне | Хороше (з модулями) |
У цьому посібнику ми будемо використовувати Nginx як reverse proxy. Перед початком переконайтеся, що у вас є VPS зі встановленою операційною системою Linux (наприклад, Ubuntu або Debian) і доступ до командного рядка.
Приклад команди для перевірки версії Nginx:
nginx -v
Ця команда виведе версію встановленого Nginx.
Приклад команди для перевірки синтаксису конфігураційного файлу Nginx:
nginx -t
Ця команда перевірить синтаксис вашого конфігураційного файлу Nginx і повідомить про помилки, якщо вони є. Завжди запускайте цю команду після внесення змін до конфігураційного файлу.
Приклад команди для перезапуску Nginx:
systemctl restart nginx
Ця команда перезапустить Nginx. Це необхідно зробити після внесення змін до конфігураційного файлу, щоб застосувати ці зміни.
Nginx – це не просто веб-сервер, це потужний інструмент для побудови високопродуктивної та надійної веб-інфраструктури.
Jane Smith, DevOps Engineer
Приклад: Ви плануєте розгорнути новий веб-застосунок. Ви можете використовувати Nginx як reverse proxy для розподілу трафіку між декількома екземплярами вашого застосунку, забезпечуючи високу доступність і масштабованість. У випадку збільшення трафіку, ви можете просто додати нові екземпляри застосунку, і Nginx автоматично почне розподіляти трафік і на них.
Потрібен надійний VPS для вашого зворотного проксі?
Розгорніть свій зворотний проксі без проблем. Наші VPS-плани пропонують ідеальну продуктивність і стабільність. — from €4.49/mo.
Вибрати VPS-план →Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Встановлення та налаштування Nginx

Процес встановлення Nginx залежить від вашої операційної системи. Нижче наведено інструкції для Ubuntu/Debian і CentOS/RHEL.
Встановлення Nginx на Ubuntu/Debian:
Спочатку оновіть список пакетів:
sudo apt update
Потім встановіть Nginx:
sudo apt install nginx
Після встановлення запустіть Nginx і налаштуйте його автозапуск під час завантаження системи:
sudo systemctl start nginx
sudo systemctl enable nginx
Встановлення Nginx на CentOS/RHEL:
Спочатку встановіть репозиторій EPEL (якщо він ще не встановлений):
sudo yum install epel-release
Потім встановіть Nginx:
sudo yum install nginx
Після встановлення запустіть Nginx і налаштуйте його автозапуск під час завантаження системи:
sudo systemctl start nginx
sudo systemctl enable nginx
Після встановлення перевірте статус Nginx, щоб переконатися, що він працює:
sudo systemctl status nginx
Очікуваний вивід:
● nginx.service - The Nginx HTTP and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-10-27 10:00:00 UTC; 10s ago
Docs: man:nginx(8)
Main PID: 1234 (nginx)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/nginx.service
└─1234 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
Oct 27 10:00:00 your-vps systemd[1]: Started The Nginx HTTP and reverse proxy server.
Якщо Nginx працює, ви повинні побачити "active (running)" у виводі команди.
Конфігураційний файл Nginx зазвичай знаходиться в /etc/nginx/nginx.conf. Сайти (virtual hosts) зазвичай зберігаються в каталозі /etc/nginx/sites-available/, а символічні посилання на активні сайти створюються в каталозі /etc/nginx/sites-enabled/.
Попередження: Перед внесенням змін до конфігураційного файлу Nginx, зробіть його резервну копію. Це дозволить вам легко відновити конфігурацію в разі виникнення проблем.
Приклад: Ви встановили Nginx на свій VPS. Тепер вам потрібно налаштувати його для обслуговування статичного сайту. Ви можете створити новий файл конфігурації в /etc/nginx/sites-available/mysite і додати в нього конфігурацію для вашого сайту. Потім ви можете створити символічне посилання на цей файл в /etc/nginx/sites-enabled/ і перезапустити Nginx, щоб застосувати зміни.
Конфігурація reverse proxy

Щоб налаштувати Nginx як reverse proxy, вам потрібно створити або змінити конфігураційний файл сайту. Наприклад, ви можете створити новий файл конфігурації /etc/nginx/sites-available/example.com і додати в нього наступну конфігурацію:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://192.168.1.100:8080;
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_set_header X-Forwarded-Proto $scheme;
}
}
В цьому прикладі:
listen 80;вказує, що Nginx буде прослуховувати порт 80 (HTTP).server_name example.com www.example.com;вказує доменні імена, для яких буде оброблятися цей сайт.proxy_pass http://192.168.1.100:8080;вказує адресу back-end сервера, на який будуть перенаправлятися запити. В даному випадку це сервер з IP-адресою192.168.1.100, що прослуховує порт8080.proxy_set_headerдирективи передають інформацію про запит клієнта back-end серверу. Це необхідно для того, щоб back-end сервер міг правильно обробляти запити.
Після створення файлу конфігурації, створіть символічне посилання на нього в каталозі /etc/nginx/sites-enabled/:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
Видаліть стандартний файл конфігурації default, якщо він існує:
sudo rm /etc/nginx/sites-enabled/default
Перевірте синтаксис конфігураційного файлу Nginx:
sudo nginx -t
Перезапустіть Nginx, щоб застосувати зміни:
sudo systemctl restart nginx
Тепер, коли користувач заходить на example.com, запит буде перенаправлено на back-end сервер 192.168.1.100:8080.
Балансування навантаження між декількома back-end серверами:
Для балансування навантаження між кількома back-end серверами, вам потрібно визначити групу серверів у конфігураційному файлі Nginx:
upstream backend {
server 192.168.1.100:8080;
server 192.168.1.101:8080;
}
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://backend;
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_set_header X-Forwarded-Proto $scheme;
}
}
У цьому прикладі Nginx розподілятиме трафік між серверами 192.168.1.100:8080 та 192.168.1.101:8080. Nginx використовує алгоритм round-robin за замовчуванням для розподілу трафіку. Ви можете використовувати інші алгоритми, такі як least_conn (найменша кількість з'єднань) або ip_hash (на основі IP-адреси клієнта).
Порада: Використовуйте інструменти для моніторингу навантаження на back-end сервери. Це дозволить вам визначити, які сервери перевантажені, і за потреби додати нові сервери до групи.
Офіційна документація Nginx про reverse proxy.
Приклад: Ви розробляєте мікросервісну архітектуру. Ви можете використовувати Nginx як reverse proxy для маршрутизації запитів до різних мікросервісів в залежності від URL-адреси. Наприклад, запити до /api/users можуть бути перенаправлені на мікросервіс управління користувачами, а запити до /api/products – на мікросервіс управління продуктами.
Безпека: SSL/TLS

SSL/TLS шифрування необхідне для забезпечення безпеки з'єднання між клієнтом та reverse proxy. Це захищає дані від перехоплення та несанкціонованого доступу. Найпростіший спосіб отримати SSL/TLS сертифікат – використовувати Let's Encrypt, безкоштовний та автоматизований центр сертифікації.
Встановлення Certbot (Let's Encrypt):
На Ubuntu/Debian:
sudo apt install certbot python3-certbot-nginx
На CentOS/RHEL:
sudo yum install certbot python3-certbot-nginx
Отримання SSL/TLS сертифіката за допомогою Certbot:
sudo certbot --nginx -d example.com -d www.example.com
Ця команда автоматично отримає та встановить SSL/TLS сертифікат для example.com та www.example.com. Certbot також автоматично налаштує Nginx для використання сертифіката.
Після успішного отримання сертифіката, Certbot запропонує вам перенаправити HTTP трафік на HTTPS. Рекомендується вибрати цей варіант для забезпечення безпеки.
Ваш конфігураційний файл Nginx буде автоматично оновлений, щоб включити SSL/TLS. Приклад конфігурації:
server {
listen 80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/nginx/snippets/ssl-params.conf;
location / {
proxy_pass http://192.168.1.100:8080;
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_set_header X-Forwarded-Proto $scheme;
}
}
У цьому прикладі:
- Перший блок
serverперенаправляє HTTP трафік (порт 80) на HTTPS (порт 443). - Другий блок
serverпрослуховує порт 443 (HTTPS) та використовує SSL/TLS сертифікат, розташований в/etc/letsencrypt/live/example.com/fullchain.pemта/etc/letsencrypt/live/example.com/privkey.pem. include /etc/nginx/snippets/ssl-params.conf;включає параметри SSL/TLS, рекомендовані Certbot.
Certbot автоматично налаштовує автоматичне оновлення SSL/TLS сертифікатів. Ви можете перевірити статус оновлення за допомогою команди:
sudo certbot renew --dry-run
Ця команда перевірить, чи потрібно оновлювати сертифікати, та покаже результат. Якщо все гаразд, ви побачите повідомлення "Congratulations, all renewals succeeded".
Попередження: Не забувайте регулярно оновлювати SSL/TLS сертифікати. Сертифікати Let's Encrypt дійсні лише 90 днів. Автоматичне оновлення – це найпростіший спосіб забезпечити, що ваші сертифікати завжди будуть дійсними.
Приклад: Ви хочете забезпечити безпечне з'єднання для свого інтернет-магазину. Ви використовуєте Certbot для отримання SSL/TLS сертифіката для вашого домену. Після встановлення сертифіката, весь трафік між користувачами та вашим магазином буде зашифрований, що захистить особисті дані користувачів, такі як паролі та дані кредитних карт.
Шукаєте сервер, який просто працює?
Valebyte VPS — NVMe, підтримка 24/7, розгортання за 60 секунд.
Моніторинг та усунення несправностей

Моніторинг та усунення несправностей важливі для забезпечення стабільної роботи вашого reverse proxy. Нижче наведено деякі корисні команди та інструменти.
Перевірка статусу Nginx:
sudo systemctl status nginx
Ця команда показує поточний статус Nginx, включаючи інформацію про те, чи запущений він, коли він був запущений та які процеси він використовує.
Перегляд логів Nginx:
Логи Nginx зберігаються в каталозі /var/log/nginx/. Найбільш важливі логи – це access.log (журнал доступу) та error.log (журнал помилок).
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Ці команди показують останні записи в логах доступу та помилок в режимі реального часу. Це корисно для відстеження проблем та помилок.
Використання journalctl:
journalctl – це інструмент для перегляду системних логів. Ви можете використовувати його для перегляду логів Nginx:
sudo journalctl -u nginx.service
Ця команда покаже всі логи, пов'язані з сервісом Nginx.
Перевірка доступності back-end серверів:
Ви можете використовувати ping або curl для перевірки доступності back-end серверів:
ping 192.168.1.100
curl http://192.168.1.100:8080
ping перевіряє, чи доступний сервер за IP-адресою. curl надсилає HTTP запит на сервер та перевіряє, чи повертає він відповідь.
Перевірка конфігурації Nginx:
Завжди перевіряйте синтаксис конфігураційного файлу Nginx перед його перезапуском:
sudo nginx -t
Якщо конфігурація містить помилки, Nginx повідомить про це.
Порада: Використовуйте інструменти для моніторингу продуктивності вашого reverse proxy, такі як Grafana або Prometheus. Це дозволить вам відстежувати завантаження процесора, використання пам'яті та трафік, та виявляти проблеми до того, як вони вплинуть на продуктивність.
Приклад: Ви помітили, що ваш веб-сайт працює повільно. Ви перевіряєте логи Nginx і бачите багато помилок 502 (Bad Gateway). Це вказує на те, що back-end сервери не відповідають на запити. Ви перевіряєте доступність back-end серверів за допомогою ping і curl і виявляєте, що один із серверів недоступний. Ви перезапускаєте цей сервер, і проблема вирішується.
На закінчення, налаштування reverse proxy на VPS з використанням Nginx – це потужний спосіб підвищити безпеку, продуктивність і керованість ваших веб-додатків. Дотримуючись цього посібника, ви зможете успішно налаштувати reverse proxy і забезпечити стабільну та надійну роботу вашого веб-сервера.
```Масштабуйте свої проєкти з хмарними інстансами
Ваш зворотний проксі готовий. Тепер підніміть свої проєкти на новий рівень з гнучкими хмарними інстансами.
Почати з хмари →