Настройка обратного прокси Nginx

Обратный прокси является мощным инструментом, который позволяет эффективно управлять и маршрутизировать веб-трафик между клиентами и веб-серверами. Не важно, работаете ли вы с небольшим веб-сайтом или со сложным веб-приложением, настройка обратного прокси в Nginx может значительно улучшить функциональность и производительность вашего сервера. 

В этой статье мы рассмотрим обратный прокси-сервер Nginx, а также как настроить Apache и PHP для работы через него.

Что такое Apache 

Apache HTTP Server (обычно называемый просто Apache) — это популярный веб-сервер, который обрабатывает запросы от клиентов (браузеров) и доставляет веб-страницы на основе запрошенных ресурсов.

Каждое подключение к серверу Apache обрабатывается отдельным процессом или потоком, и сервер не может принять новое подключение, пока предыдущее не завершено. Это позволяет Apache обеспечить стабильность и надёжность, но требует больше ресурсов для поддержки множества одновременных соединений.

Что такое Nginx

Nginx – это высокопроизводительный веб- и прокси-сервер. Он эффективно обрабатывает множество одновременных соединений, не блокируя выполнение процессов. 

Nginx также известен своей способностью эффективно обрабатывать статические файлы, а также выполнять функции обратного прокси-сервера и балансировщика нагрузки.

Использование обратного прокси-сервера Nginx совместно с Apache позволяет получить оптимальное сочетание функциональности и производительности. Nginx может выступать в роли промежуточного сервера, перенаправляя запросы к Apache для обработки динамического контента, такого как скрипты PHP или базы данных.

Что такое обратный прокси-сервер

Обратный прокси-сервер (Reverse Proxy Server) – это прокси-сервер, который действует от имени сервера и выполняет функции промежуточного узла между клиентами и серверами. В отличие от обычного прокси-сервера, который работает от имени клиента и перенаправляет запросы к серверам, обратный прокси-сервер получает запросы от клиентов и пересылает их на один или несколько серверов.

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

Таким образом, обратный прокси-сервер делит трафик равномерно между серверами, что позволяет достичь более высокой производительности и отказоустойчивости системы.

Преимущества обратного прокси-сервера 

Обратный прокси-сервер имеет несколько преимуществ, которые делают его полезным инструментом для оптимизации и защиты серверной инфраструктуры. 

Некоторые из основных преимуществ обратного прокси-сервера включают:

  • Балансировка нагрузки. Обратный прокси-сервер может равномерно распределять запросы от клиентов на несколько серверов, что позволяет более эффективно использовать ресурсы и предотвращает перегрузку отдельных серверов. 
  • Кэширование. Обратный прокси-сервер может кэшировать статический контент, такой как изображения, CSS-файлы и JavaScript. Когда клиент запрашивает этот контент, он может быть доставлен непосредственно из кэша обратного прокси-сервера, что уменьшает время загрузки страниц и снижает нагрузку на серверы.
  • Улучшенная безопасность. Обратный прокси-сервер может служить барьером между клиентами и серверами, фильтруя и проверяя запросы перед тем, как они достигнут сервера. Это позволяет обнаруживать и блокировать вредоносные запросы, атаки и нежелательный трафик, что способствует повышению безопасности серверов.
  • SSL-терминация. Обратный прокси-сервер может выполнять расшифровку SSL-шифрования и обрабатывать защищенные HTTPS-запросы от клиентов, а затем передавать их внутренним серверам. Благодаря этому снижается нагрузка на серверы и упрощается управление сертификатами безопасности.
  • Анонимность. Обратный прокси-сервер может скрывать реальные IP-адреса серверов, предоставляя клиентам только свой собственный IP-адрес. Это повышает анонимность и защищает серверы от прямых атак со стороны злоумышленников.
  • Упрощение масштабирования. Обратный прокси-сервер может служить точкой входа для всех клиентских запросов, что упрощает масштабирование серверной инфраструктуры. Вместо того чтобы изменять настройки каждого сервера, можно просто настроить обратный прокси-сервер для перенаправления запросов на новые серверы.
  • Гибкая настройка. Обратный прокси-сервер обладает мощными возможностями настройки, позволяющими оптимизировать работу сети, регулировать доступ и выполнять другие функции в зависимости от потребностей.

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

Предварительные требования

  • ОС Ubuntu 18.04, 20.04 или 22.04: Убедитесь, что на сервере установлена одна из указанных версий операционной системы Ubuntu. Вы можете выполнить эту установку самостоятельно или обратиться к провайдеру услуг хостинга, чтобы он предоставил вам сервер с предустановленной подходящей версией ОС.
  • SSH-доступ: Установите и настройте SSH на сервере, чтобы иметь возможность подключиться к нему удалённо через SSH-протокол. SSH-подключение обеспечит безопасную командную строку для управления и настройки сервера.
  • Учётные данные: Обязательно имейте доступ к учётным данным суперпользователя (root) или учётной записи с привилегиями администратора на сервере. Так вы сможете выполнять системные задачи и настройки.

Как установить обратный прокси-сервер Nginx

  1. Установите Nginx, выполнив команды:

sudo apt-get update

sudo apt-get install nginx

  1. Откройте файл конфигурации Nginx, который обычно находится в директории /etc/nginx/. Основной файл конфигурации называется nginx.conf, и вы можете отредактировать его следующей командой:

sudo nano /etc/nginx/nginx.conf

  1. Добавьте следующий блок кода в файл конфигурации, чтобы настроить Nginx в качестве прокси-сервера:

    server {

        listen 80;

     root /var/www/;

     index index.php;

        server_name your_domain.ru;

location / {

             try_files $uri $uri/ /index.php$args;

     }

location/ {

             proxy_pass http://127.0.0.1:8080;

             proxy_set_header X-Real-IP  $remote_addr;

             proxy_set_header X-Forwarded-For $remote_addr;

             proxy_set_header Host $host;

            proxy_set_header X-Forwarded-Port  $server_port;

     }

}

Где your_domain.ru необходимо заменить на ваш домен или IP-адрес. 

В данной конфигурации обратного прокси-сервера Nginx используются следующие переменные:

  • X-Real-IP $remote_addr – эта переменная содержит IP-адрес реального клиента, который отправляет запросы на прокси-сервер Nginx. Она используется для передачи реального IP-адреса клиента на внутренний сервер.
  • X-Forwarded-For $proxy_add_x_forwarded_for – эта переменная содержит список IP-адресов каждого прокси-сервера, через который прошёл клиентский запрос. Каждый прокси-сервер, через который он проходит, добавляет свой IP-адрес к этому списку, что позволяет проследить маршрут запроса через различные прокси-серверы.
  • Host $host – эта переменная содержит имя хоста, которое может быть получено из строки запроса или поля заголовка запроса "Host". Если клиент не отправляет его, то значение будет соответствовать имени сервера, на котором работает Nginx.
  • X-Forwarded-Port $server_port – определяет исходный порт, который был запрошен клиентом, что позволяет прокси-серверу передать информацию о порте, который клиент использовал для подключения.
  1. Проверьте конфигурацию на наличие ошибок:

sudo nginx -t

  1. Если конфигурация не содержит ошибок, перезапустите Nginx для применения изменений:

sudo systemctl restart nginx

Теперь ваш Nginx прокси-сервер настроен и готов к использованию. Вы можете проверить его работу, отправив запросы на ваш домен или IP-адрес и убедившись, что они успешно перенаправляются на ваш внутренний сервер.

Как настроить Apache и PHP для работы через обратный прокси-сервер

Для настройки Apache и PHP для работы через обратный прокси-сервер (в данном случае Nginx) необходимо выполнить следующие шаги:

  1. Установите и настройте Nginx в качестве обратного прокси-сервера, как описано выше. Убедитесь, что Nginx настроен для проксирования запросов на Apache.
  2. Выполните команды:

sudo apt update

sudo apt install apache2 libapache2-mod-php8.2

  1. Затем пропишите:

sudo nano /etc/apache2/ports.conf

  1. Теперь необходимо указать порт, к которому будут адресованы запросы Apache:

Listen 127.0.0.1:8080

  1. Откройте конфигурационный файл Apache:

sudo nano /etc/apache2/sites-available/example-apache.conf

  1. Введите в нём следующий код:

<VirtualHost 127.0.0.1:8080>

     DocumentRoot /var/www/

     ServerName example.ru

     ErrorLog /var/log/apache2/example_error.log

     CustomLog /var/log/apache2/example_access.log common

     <Directory /var/www/>

             Options FollowSymLinks

             AllowOverride All

             Require all granted

     </Directory>

</VirtualHost>

В этом примере, «example.ru» и «example» замените на ваше доменное имя, а затем сохраните внесённые изменения.

  1. Итак, вы создали виртуальный хост. Запустите сначала его, а потом и Apache с помощью команд:

a2ensite example-apache.conf

service apache2 start

mkdir -p /var/www/

echo '<?php phpinfo();' > /var/www/index.php

Теперь ваш Apache и PHP настроены для работы через обратный прокси-сервер Nginx. Запросы будут передаваться сначала на Nginx, а затем на Apache для обработки PHP. Убедитесь, что все настройки соответствуют вашим потребностям и требованиям.

Всё ещё остались вопросы?