Использование Nginx в качестве проксирующего фронтенда Apache

Почему Nginx и Apache используют в связке?

Nginx и Apache – очень мощные и продуктивные серверы. В настоящее время Apache является веб-сервером №1 для размещения сайтов. Обретая популярность с момента выхода (2006 год), веб-сервер Nginx на данный момент занимает второе место в рейтинге веб-серверов для динамических сайтов. Причины популярности этих серверов ясны: Apache широко известен благодаря своей мощности, а Nginx – благодаря скорости. Тем не менее, оба сервера имеют недостатки: Apache занимает много памяти сервера, а Nginx (который отлично справляется со статическими файлами) зависит от php-fpm или аналогичных модулей для динамического контента. Однако эти два веб-сервера можно объединить для большего эффекта, используя Nginx как фронтенд для статического контента, а Apache – как бэкэнд.

Требования

Чтобы следовать данному руководству, нужно создать пользователя с привилегиями sudo. Чтобы получить инструкции по созданию такого пользователя, читайте руководство «Начальная настройка сервера Ubuntu 12.04».

Установка Nginx

Для начала необходимо установить и настроить Nginx.

Для этого используйте менеджер пакетов apt-get:

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 в случае если root документа Apache и Nginx совпадают.

Данные настройки создают систему, перенаправляющую все расширения с окончанием php на бэкэнд Apache, запущенный на порту 8080.

Теперь активируйте виртуальный хост:

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

Кроме того, необходимо удалить блок server (виртуальный хост Nginx) по умолчанию.

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

Готово! Теперь, когда Nginx установлен и полностью готов к работе, можно переходить к установке и настройке Apache.

Установка Apache

Итак, чтобы установить Apache, используйте:

sudo apt-get install apache2

Поскольку сервер Nginx пока что отключен (он не включается автоматически после установки), Apache будет запущен на сервере 80.

Настройка Apache

Теперь нужно настроить Apache как бэкэнд сервера Nginx, запущенный на порту 8080. Чтобы Apache использовал правильный порт, откройте файл ports:

sudo nano /etc/apache2/ports.conf

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

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

Главный параметр, который необходимо исправить в данном случае, – это номер порта, на котором будет работать виртуальный хост; измените порт 80 по умолчанию на порт 8080.

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

<VirtualHost 127.0.0.1:8080>

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

sudo a2ensite example

Для корректной работы Apache нужно установить php. Для этого используйте:

sudo apt-get install php5

Теперь перезапустите оба сервера, чтобы активировать изменения настроек:

sudo service apache2 restart
sudo service nginx restart

Завершающие действия

Итак, теперь на VPS установлены Nginx (как фронтенд сайта) и Apache (бэкэнд, обрабатывающий php-запросы). Чтобы перейти на приветственную страницу сайта, используйте его доменное имя.

Чтобы проверить маршрутизацию информации и работу Apache, запустите общий php-скрипт.

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

sudo nano /var/www/info.php

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

<?
phpinfo( );
?>

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

Затем посетите доменное_имя/info.php. появится страница php info, обработанная сервером apache.

В завершение нужно узнать, какие порты открыты и какие приложения запущены на каждом открытом порту. Для этого используйте команду:

sudo netstat -plunt

Итоги

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

Tags: , , ,

1 комментарий

Добавить комментарий для Vitaliy Отменить ответ