Как настроить Nginx reverse proxy для Apache

Apache и Nginx являются двумя из самых популярных веб-серверов в интернете, но они работают немного по-разному и предназначены для разных целей. В тоже время, есть возможность настроить Nginx как reverse proxy для Apache. Для начала рассмотрим преимущества каждого из веб-серверов:

Apache

1. Гибкость и настройка: Apache известен своей гибкостью. Он поддерживает широкий спектр модулей, которые позволяют настроить сервер под различные нужды и требования.

2. .htaccess для локальной конфигурации: Apache позволяет использовать файлы .htaccess для управления конфигурацией на уровне директории, что дает пользователям больше контроля над настройками без необходимости доступа к основному конфигурационному файлу.

3. Поддержка динамического контента: Apache эффективно обрабатывает динамический контент напрямую, используя модули, такие как mod_php для PHP, что делает его удобным для традиционных веб-приложений.

Nginx

1. Обработка статического контента и производительность: Nginx превосходит Apache в обработке статического контента и управлении большим количеством одновременных соединений используя для этого меньше ресурсов.

2. Асинхронная архитектура: Nginx использует асинхронную, неблокирующую архитектуру, которая позволяет ему эффективно обрабатывать множество запросов одновременно без значительного увеличения нагрузки на сервер.

3. Эффективность как обратного прокси: Nginx часто используется в качестве обратного прокси благодаря своей способности быстро и эффективно управлять входящим трафиком, распределяя запросы между серверами.

Использование Nginx как reverse proxy для Apache

При использовании Nginx в качестве обратного прокси для Apache проявляются сильные стороны обоих веб серверов:

  • Обработка статического и динамического контента: Nginx может быть настроен для обработки всех статических ресурсов (например, изображений, CSS, JavaScript), в то время как динамический контент (например, PHP-страницы) перенаправляется на Apache. Это сочетание позволяет каждому серверу делать то, в чем он лучше всего.
  • Масштабируемость и производительность: Nginx обрабатывает большинство запросов и управляет большим количеством соединений более эффективно, снижая нагрузку на Apache, который затем может сосредоточиться на обработке динамического контента.
  • Безопасность и стабильность: Nginx может действовать как буфер между пользователями и Apache, обеспечивая дополнительный уровень безопасности от атак и перегрузки сервера.
  • Гибкость в настройке SSL/TLS: Nginx может обрабатывать шифрование SSL/TLS, что снимает эту нагрузку с Apache.

Это сочетание приводит к увеличению общей производительности, улучшенной безопасности и лучшей масштабируемости системы.

Как настроить Nginx reverse proxy для Apache

Если у вас ещё не установлен nginx или apache, то сделайте это следуя нашим инструкциям из практического курса по установке WordPress на Debian 11 без панели управления. После этого переходите к непосредственной настройке.

Настройка Nginx как reverse proxy для Apache

Настройка Nginx как обратного прокси для Apache предполагает выполнение ряда настроек, требующих детального рассмотрения. Ниже приведено разъяснение каждого шага.

Шаг 1: Настройка Apache

Apache по умолчанию слушает порт 80, который является стандартным портом для HTTP-трафика. Чтобы избежать конфликтов портов с Nginx, который также будет слушать порт 80 для принятия входящих соединений, Apache настраивается на прослушивание порта 8080.

1.1 Откройте конфигурационный файл Apache используя текстовый редактор:

sudo nano /etc/apache2/ports.conf

1.2 Измените строку Listen 80 на Listen 8080

Listen 8080

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

1.3 Сохраните файл и закройте редактор
1.4 Отредактируйте наш тестовый хост

sudo nano /etc/apache2/sites-enabled/test.friendhosting.net.conf
<VirtualHost *:8080>
ServerAdmin [email protected]
ServerName test.friendhosting.net
ServerAlias www.test.friendhosting.net
DocumentRoot /var/www/test.friendhosting.net/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

1.5 Перезапустите Apache, чтобы применить изменения

sudo systemctl restart apache2

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

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

Теперь, нам необходимо настроить Nginx на перенаправление входящего трафика на Apache.

2.1 Откройте конфигурационный файл Apache используя текстовый редактор

sudo nano /etc/nginx/sites-available/test.friendhosting.net

2.2 Замените содержимое на следующее

server {
listen *:80;

server_name test.friendhosting.net www.test.friendhosting.net;
access_log /var/log/nginx/access.log;

location / {
proxy_pass http://127.0.0.1:8080/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_connect_timeout 120;
proxy_send_timeout 120;
proxy_read_timeout 180;
}

location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ {
root /var/www/test.friendhosting.net/;
}
}

Эти настройки перенаправят весь трафик с Nginx на Apache, который работает на порту 8080. Конфиг обеспечивает эффективное разделение обработки динамического содержимого (через проксирование к Apache) и статического содержимого (непосредственно через Nginx), что позволяет оптимизировать производительность и управление ресурсами.

2.3 Проверьте конфигурацию Nginx на наличие ошибок

sudo nginx -t

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

sudo systemctl restart nginx

3. Проверка работы

После настройки Nginx в качестве обратного прокси для Apache, следующим шагом будет проверка корректности выполненной работы. Вот подробное руководство по проверке настройки.

Выполните следующую команду

netstat -nltp

Это позволит вам увидеть список всех активных соединений и слушающих портов, а также соответствующие им PID (идентификаторы процессов) и названия служб. В выводе команды ищите строки, указывающие, что Nginx слушает порт 80, а Apache слушает порт 8080. Это указывает на то, что Nginx работает в качестве фронтенда, принимая входящие HTTP-запросы, а Apache выступает в роли бэкенда, обрабатывая динамический контент на нестандартном порту.

Как настроить Nginx reverse proxy для Apache

Также проверьте корректность работы сайта. В нашем случае мы проверяем работу http://test.friendhosting.net

Как настроить Nginx reverse proxy для Apache

Поддомен доступен по http, а проверка логов nginx говорит о том, что в нём присутствуют данные о статических файлах, которые отдаются nginx

Как настроить Nginx reverse proxy для Apache

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