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

Веб-серверы Nginx и Apache очень производительны. На сегодняшний день Apache является самым популярным веб-сервером благодаря своей мощности, а Nginx – вторым по популярности благодаря скорости. Конечно, каждый веб-сервер имеет и свои недостатки: Apache требует много серверной памяти, а Nginx (который отлично справляется с поддержкой статических файлов) нуждается в PHP-FPM или аналогичных модулях для обработки динамического контента.

Данное руководство покажет, как объединить преимущества данных серверов, установив Nginx на фронт-энде, а Apache – на бэкенде.

Требования

Для выполнения инструкций нужно иметь:

  • Предварительно настроенный сервер Ubuntu.
  • Доступ к sudo.

Процесс настройки сервера Ubuntu и получение доступа к sudo описаны в этой статье.

Установка Nginx

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

Чтобы установить веб-сервер Nginx, введите:

sudo apt-get install nginx

После загрузки можно настроить виртуальный хост.

Настройка Nginx

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

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

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

server {
listen   80;
root /var/www/;
index index.php index.html index.htm;
server_name example.com;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
proxy_set_header X-Real-IP  $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8080;
}
location ~ /\.ht {
deny all;
}
}

Этот блок кода выполняет следующие действия:

  • Устанавливает правильный root-каталог.
  • Добавляет index.php в строку index.
  • Директива try_files пытается обслужить любую запрашиваемую пользователем страницу. Если nginx недоступен, файл передаётся на прокси.
  • Директива proxy_pass сообщает адрес прокси-сервера.
  • Блок location ~ /\.ht { запрещает доступ к файлам .htaccess, если каталог document root сервера Apache совпадает с root-каталогом nginx.

Данный набор директив настраивает систему для перенаправления всех файлов с расширением .php на сервер apache, который будет работать на порте 8080.

Включите виртуальный хост:

sudo ln -s /etc/nginx/sites-available/example /etc/nginx/sites-enabled/example

Удалите стандартный блок server:

sudo rm /etc/nginx/sites-enabled/default

Теперь нужно установить и настроить Apache.

Установка Apache

Чтобы установить пакет Apache, введите:

sudo apt-get install apache2

Поскольку nginx ещё не запущен, сервер Apache запустится на порте 80.

Настройка Apache

Теперь нужно настроить Apache в качестве бэкенда на порте 8080 (как сказано в настройках nginx). Откройте файл ports:

sudo nano /etc/apache2/ports.conf

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

NameVirtualHost 127.0.0.1:8080
Listen 127.0.0.1:8080

Сохраните и закройте файл.

Затем откройте новый файл виртуального хоста, скопировав код из стандартного файла Apache:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/example
sudo nano /etc/apache2/sites-available/example

Главное, что нужно исправить, – это номер порта.

Строка должна выглядеть так:

<VirtualHost 127.0.0.1:8080>

Проверьте, правильно ли установлен Document Root. Сохраните и закройте файл, а затем включите виртуальный хост.

sudo a2ensite example

Прежде чем перейти к тестированию настройки, нужно становить PHP для Apache.

sudo apt-get install php5

Перезапустите оба веб-сервера, чтобы обновить настройки:

sudo service apache2 restart
sudo service nginx restart

Тестирование

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

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

Создайте файл php.info:

sudo nano /var/www/info.php

Внесите в него следующий код:

<?
phpinfo( );
?>

Сохраните и закройте файл.

В браузере откройте ваш_домен/info.php. На экране появятся сведения о работе php, где будет сказано, что на данный момент apache обрабатывает php-запросы.

Чтобы просмотреть открытые порты и узнать, какие приложения на них запущены, введите команду:

sudo netstat -plunt

Связка Apache +nginx позволяет значительно улучшить работу сайта. Конечно, данное руководство охватывает только основы настройки их взаимодействия. Если у вас есть вопросы или дополнения, пожалуйста, оставьте комментарий под этой статьёй.

Tags: , , ,

Добавить комментарий