ИСПОЛЬЗОВАНИЕ 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 – серьезное улучшение сервера. Конечно, данное руководство представляет всего лишь краткий обзор и не охватывает всех функций и параметров.