Как настроить обратный прокси Nginx для Apache ⋆ ALexHost SRL

Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!.

Используйте код при регистрации:

Skills
10.12.2024

Как настроить обратный прокси Nginx для Apache

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

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

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

Обратный прокси – это сервер, который находится перед одним или несколькими внутренними серверами и перенаправляет запросы клиентов на соответствующий сервер. В данном случае Nginx будет выступать в роли обратного прокси, перенаправляя запросы на Apache, который будет обслуживать динамический контент.

Использование Nginx в качестве обратного прокси дает несколько преимуществ:

  • Повышенная производительность: Nginx отлично справляется с быстрой обработкой статических файлов (например, изображений, CSS, JavaScript), снижая нагрузку на Apache.
  • Балансировка нагрузки: Nginx может распределять трафик между несколькими внутренними серверами, повышая доступность и надежность.
  • Завершение SSL: Nginx может обрабатывать SSL-шифрование, снимая вычислительную нагрузку с Apache.
  • Безопасность: Nginx может предоставлять дополнительные функции безопасности, такие как фильтрация запросов и ограничение скорости.

Шаг 1: Установите Nginx и Apache

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

Для Debian/Ubuntu:
sudo apt update
sudo apt install nginx apache2
Для CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx httpd

После установки Nginx и Apache запустите и включите обе службы, чтобы они работали при загрузке:

sudo systemctl start nginx
sudo systemctl start apache2 # Для CentOS используйте 'httpd' вместо 'apache2'
sudo systemctl enable nginx
sudo systemctl enable apache2

Шаг 2: Настройте Apache

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

8080
(вместо стандартного
80
), чтобы Nginx мог прослушивать порт
80
.

Настройте Apache на прослушивание порта 8080:
  1. Откройте файл конфигурации Apache:
    sudo nano /etc/apache2/ports.conf # Для Debian/Ubuntu
    sudo nano /etc/httpd/conf/httpd.conf # Для CentOS/RHEL
  2. Найдите строку, в которой указан порт, к которому прислушивается Apache (обычно это
    Listen 80
    ), и измените ее на:
    Listen 8080
  3. Сохраните изменения и выйдите из редактора.
  4. Перезапустите Apache, чтобы применить изменения:
    sudo systemctl restart apache2 # Для Debian/Ubuntu
    sudo systemctl restart httpd # Для CentOS/RHEL

Теперь Apache настроен на прослушивание порта

8080
, что позволит Nginx прослушивать порт
80
(HTTP-порт по умолчанию) и перенаправлять запросы к Apache.

Шаг 3: Настройка Nginx в качестве обратного прокси-сервера

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

80
и перенаправлять запросы к Apache на порт
8080
.

Создание конфигурации виртуального хоста Nginx:
  1. Откройте или создайте новый файл конфигурации виртуального хоста в Nginx:
    sudo nano /etc/nginx/sites-available/example.com # Для Debian/Ubuntu
    sudo nano /etc/nginx/conf.d/example.com.conf # Для CentOS/RHEL
  2. Добавьте в файл следующую конфигурацию:
    server {
    listen 80;
    имя_сервера example.com www.example.com; # Замените на IP-место вашего домена или сервера
    / {
    proxy_pass http://127.0.0.1:8080; # Переадресуйте запросы к Apache
    proxy_set_header Хост $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 для лучшей производительности
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    срок действия 365d;
    root /var/www/html; # Путь к вашим статическим файлам
    }
    }

В этой конфигурации:

  • listen 80
    : Nginx прослушивает порт
    80
    для входящих запросов.
  • имя_сервера
    : домен или IP-адрес, который будет обслуживать Nginx.
  • proxy_pass
    : Перенаправляет запросы в Apache, который слушает порт
    8080
    .
  • proxy_set_header
    : Передает Apache различные заголовки, включая исходный IP-адрес и протокол клиента.
  • Блок
    location
    для статического контента гарантирует, что Nginx будет обслуживать такие файлы, как изображения, CSS и JavaScript, напрямую, снижая нагрузку на Apache.
  1. Сохраните и закройте файл конфигурации.
  2. Если вы используете Debian/Ubuntu, включите сайт, создав симлинк на
    sites-enabled
    :
    sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
  3. Проверьте конфигурацию Nginx на наличие синтаксических ошибок:
    sudo nginx -t
  4. Перезапустите Nginx, чтобы применить новую конфигурацию:
    sudo systemctl restart nginx

Шаг 4: Тестирование настройки обратного прокси

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

  1. Зайдите на свой домен или IP-адрес: Откройте браузер и перейдите по адресу
    http://example.com
    (замените на реальный домен или IP-адрес сервера). Если все настроено правильно, вы должны увидеть, что содержимое обслуживается Apache, но направляется через Nginx.
  2. Проверьте журналы Nginx и Apache: Если возникли какие-либо проблемы, проверьте журналы Nginx и Apache, чтобы устранить неполадки:
    • Журналы Nginx:
      /var/log/nginx/access.log
      и
      /var/log/nginx/error.log
    • Журналы Apache:
      /var/log/apache2/access.log
      и
      /var/log/apache2/error.log
      (или
      /var/log/httpd/
      для CentOS/RHEL)

Шаг 5: (Необязательно) Настройте SSL для HTTPS

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

Шаги по включению SSL:
  1. Получение SSL-сертификата: Вы можете использовать Let’s Encrypt для получения бесплатного SSL-сертификата для вашего домена:
    sudo apt install certbot python3-certbot-nginx # Для Debian/Ubuntu
    sudo yum install certbot python3-certbot-nginx # Для CentOS/RHELsudo
    certbot –nginx -d example.com -d www.example.com
  2. Измените конфигурацию Nginx: Обновите конфигурационный файл Nginx, чтобы прослушивать порт
    443
    для HTTPS:
    nginx
    сервер {
    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;location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Хост $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;
    }location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    срок действия 365d;
    root /var/www/html;
    }
    }
  3. Перенаправление HTTP на HTTPS: Добавьте в конфигурацию блок перенаправления, чтобы все HTTP-запросы перенаправлялись на HTTPS:
    server {
    listen 80;
    имя_сервера example.com www.example.com;
    return 301 https://$server_name$request_uri;
    }
  4. Перезапустите Nginx: Перезапустите Nginx, чтобы применить изменения:
    sudo systemctl restart nginx

Заключение

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

Следуя шагам, описанным в этом руководстве, вы сможете настроить Nginx в качестве обратного прокси-сервера перед Apache и воспользоваться преимуществами обоих миров. Кроме того, внедрение SSL в Nginx гарантирует безопасность вашего сайта, обеспечивая спокойствие для вас и ваших пользователей.

Проверьте свои навыки на всех наших услугах хостинга и получите скидку 15%!.

Используйте код при регистрации:

Skills