Nginx как обратный прокси-сервер Apache
Ubuntu | Комментировать запись
Веб-серверы 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: Apache, NGINX, PHP, Ubuntu