Як налаштувати Nginx і Apache у ролі зворотного проксі

Nginx і Apache

Налаштування зворотного проксі-сервера — потужний інструмент управління вебтрафіком. Якщо тобі потрібно розподілити трафік, покращити безпеку або спростити технічне обслуговування, налаштуй зворотний проксі для своєї мережевої інфраструктури. 

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

Що таке зворотний проксі, навіщо його використовувати та як обрати

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

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

Чому потрібно використовувати зворотний проксі?

  1. Балансування навантаження: забезпечує розподіл трафіку між серверами, отже дозволяє уникнути перевантаження окремих систем і підтримує оптимальну продуктивність.
  2. Захист: захищає внутрішні сервери від прямого зовнішнього доступу, таким чином знижує ризики зовнішніх атак і підвищує рівень безпеки.
  3. Кешування: використовується для зберігання та швидкого доступу до популярних ресурсів, що зменшує час завантаження та оптимізує роботу серверів.
  4. SSL-термінація: відповідає за обробку шифрування SSL, що полегшує роботу внутрішніх серверів і підвищує загальну ефективність системи.

При виборі програмного забезпечення для зворотного проксі варто розглянути такі популярні варіанти:

  1. Nginx: відомий своєю високою продуктивністю і низькими вимогами до ресурсів.
  2. Apache: має велику кількість налаштувань і широке застосування в різних середовищах.
  3. HAProxy: ідеальний для складних сценаріїв балансування навантаження.
  4. Traefik: підходить для автоматизації управління мікросервісами у динамічних контейнерних середовищах.

Розгляньмо детальніше, як налаштувати Nginx і Apache як зворотні проксі-сервери. 

Налаштування Nginx як зворотного проксі

Використання Nginx у ролі зворотного проксі дозволяє:

  • розподіляти трафік між декількома серверами;
  • підвищувати продуктивність;
  • забезпечувати захист від DDoS-атак;
  • здійснювати кешування контенту для прискорення роботи сайту. 

Встановлення правил обробки запитів і налаштування параметрів з’єднань дозволяє гнучко адаптувати роботу сервера до потреб конкретного проєкту. 

Базова конфігурація

1. Встановіть Nginx

На Ubuntu/Debian:

bash

 sudo apt update

 sudo apt install nginx

На CentOS/RHEL:

bash

 sudo yum install epel-release

 sudo yum install nginx

2. Налаштуй Nginx як зворотний проксі

Відредагуй файл конфігурації Nginx:

bash

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

Додай таку конфігурацію:

nginx

 server {

 listen 80;

server_name example.com;

location / {

 proxy_pass http://backend_server_address;

 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;

 }

 }

Заміни `backend_server_address` на адресу свого внутрішнього сервера.

3. Перезапусти Nginx

bash

 sudo systemctl restart nginx

Тепер твій сервер Nginx має працювати як зворотний проксі.

Розширена конфігурація Nginx 

1. Балансування навантаження

nginx

 upstream backend_servers {

 server backend1.example.com;

 server backend2.example.com;

 server backend3.example.com;

 }

server {

 listen 80;

 server_name example.com;

location / {

 proxy_pass http://backend_servers;

 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;

 }

 }

2. Завершення SSL

nginx

 server {

 listen 443 ssl;

 server_name example.com;

ssl_certificate /etc/nginx/ssl/example.com.crt;

 ssl_certificate_key /etc/nginx/ssl/example.com.key;

location / {

 proxy_pass http://backend_server_address;

 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;

 }

 }

3. Кешування

nginx

 proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;server {

 listen 80;

 server_name example.com;location / {

 proxy_cache my_cache;

 proxy_pass http://backend_server_address;

 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;

 add_header X-Cache-Status $upstream_cache_status;

 }

 }

Налаштування Apache як зворотного проксі

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

Завдяки модулям mod_proxy і mod_ssl, Apache дозволяє легко налаштовувати з’єднання для проксіювання запитів, забезпечуючи балансування навантаження, кешування контенту та підтримку SSL для захисту даних. Як наслідок — підвищення продуктивності і надійності вебзастосунків, забезпечена безперебійна робота навіть під високим навантаженням.

Базова конфігурація 

1. Встанови Apache

На Ubuntu/Debian:

bash

 sudo apt update

 sudo apt install apache2

На CentOS/RHEL:

bash

 sudo yum install httpd

2. Увімкни необхідні модулі

bash

 sudo a2enmod proxy

 sudo a2enmod proxy_http

 sudo a2enmod proxy_balancer

 sudo a2enmod lbmethod_byrequests

Перезапусти Apache, щоб застосувати зміни:

bash

 sudo systemctl restart apache2

3. Налаштуй Apache як зворотний проксі

Відредагуй стандартну конфігурацію сайту:

bash

 sudo nano /etc/apache2/sites-available/000-default.conf

Додай таку конфігурацію:

apache

 <VirtualHost *:80>

 ServerName example.com

ProxyPreserveHost On

 ProxyPass / http://backend_server_address/

 ProxyPassReverse / http://backend_server_address/

 </VirtualHost>

Заміни `backend_server_address` на адресу свого внутрішнього сервера.

4. Перезапусти Apache

bash

 sudo systemctl restart apache2

Тепер твій сервер Apache має працювати як зворотний проксі.

Розширена конфігурація Apache

1. Балансування навантаження

apache

 <Proxy “balancer://mycluster”>

 BalancerMember http://backend1.example.com

 BalancerMember http://backend2.example.com

 BalancerMember http://backend3.example.com

 ProxySet lbmethod=byrequests

 </Proxy>

<VirtualHost *:80>

 ServerName example.com

ProxyPreserveHost On

 ProxyPass / balancer://mycluster/

 ProxyPassReverse / balancer://mycluster/

 </VirtualHost>

2. Завершення SSL

Enable SSL module:

bash

 sudo a2enmod ssl

Відредагуй стандартну конфігурацію сайту SSL:

bash

 sudo nano /etc/apache2/sites-available/default-ssl.conf

Додай таку конфігурацію:

apache

 <VirtualHost *:443>

 ServerName example.com

SSLEngine on

 SSLCertificateFile /etc/apache2/ssl/example.com.crt

 SSLCertificateKeyFile /etc/apache2/ssl/example.com.key

ProxyPreserveHost On

 ProxyPass / http://backend_server_address/

 ProxyPassReverse / http://backend_server_address/

 </VirtualHost>

Увімкни SSL сайту:

bash

 sudo a2ensite default-ssl

 sudo systemctl reload apache2

3. Кешування

Увімкни модулі кешу:

bash

 sudo a2enmod cache

 sudo a2enmod cache_disk

 sudo a2enmod headers

Додай таку конфігурацію:

apache

 <VirtualHost *:80>

 ServerName example.com

CacheQuickHandler off

 CacheLock on

 CacheLockPath /tmp/mod_cache-lock

 CacheIgnoreHeaders Set-Cookie

<Location />

 CacheEnable disk

 ProxyPass http://backend_server_address/

 ProxyPassReverse http://backend_server_address/

 Header add X-Cache-Status “%{CACHE_STATUS}e”

 </Location>

 </VirtualHost>

Перезапусти Apache, щоб застосувати зміни:

bash

 sudo systemctl restart apache2

 Як захистити зворотний проксі?

1. Використовуй SSL/TLS

// Впровадь SSL/TLS для шифрування трафіку між клієнтом і проксі-сервером, а також між проксі-сервером і кінцевим сервером.

// Переконайся, що використовуються сучасні протоколи та алгоритми шифрування.

2. Обмеж трафік

// Використовуй доступ на основі IP-адрес для обмеження доступу до проксі-сервера.

// Налаштуй швидкісні обмеження для захисту від DDoS-атак.

3. Web Application Firewall (WAF)

// Впровадь WAF для захисту від атак на вебзастосунки, таких як SQL-ін’єкції, XSS та інших поширених вразливостей.

// Налаштуй правила WAF для блокування підозрілого трафіку.

4. Моніторинг журналів

// Регулярно аналізуй журнали доступу та помилок для виявлення підозрілої активності.

// Використовуй інструменти моніторингу та аналітики для автоматичного виявлення аномалій.

5. Регулярні оновлення

// Регулярно оновлюй програмне забезпечення зворотного проксі для виправлення вразливостей.

// Впровадь автоматичні оновлення безпеки для забезпечення своєчасного захисту.

Моніторинг і обслуговування проксі-сервера

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

  1. Інструменти моніторингу: застосовуй системи моніторингу, такі як Nagios, Zabbix або Prometheus, для відстеження стану та продуктивності проксі-сервера. Ці інструменти допоможуть виявити потенційні проблеми на ранніх стадіях і запобігти простоям.
  2. Керування журналами: використовуй централізовані рішення для керування журналами, такі як ELK Stack (Elasticsearch, Logstash, Kibana) або Splunk, щоб зберігати та аналізувати журнали подій і помилок. 
  3. Регулярне резервне копіювання важливих файлів конфігурації та сертифікатів SSL: це забезпечить можливість швидкого відновлення проксі-сервера у випадку збоїв або втрати даних.
  4. Налаштування продуктивності: періодично аналізуй і оптимізуй конфігурацію проксі-сервера. Виконуй налаштування кешування, балансування навантаження та інших параметрів для забезпечення швидкої та стабільної роботи.

Підсумуємо

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

Дотримуючись рекомендацій щодо базової та розширеної конфігурації, а також заходів з безпеки та моніторингу, ти зможеш забезпечити стабільну та ефективну роботу системи, відповідаючи на сучасні вимоги вебтрафіку та забезпечуючи високий рівень обслуговування для кінцевих користувачів. А навчитись працювати з проксі-серверами ти можеш у нас на курсі «Вебсервери на Linux».

Залишити відповідь

Дякуємо, що поділились