Приветствую Вас, уважаемые читатели. Сегодня тема статьи: "Nginx (front-end) + Apache (back-end)". Есть два наиболее популярных веб-сервера – это Nginx и Apache. Лучшим выбором в основном считается использование Nginx с дополнительными компонентами для обработки динамического содержимого. Но бывают ситуации, когда без использования Apache не обойтись. В таком случае, можно использовать связку двух веб-серверов - Nginx в качестве кэширующего прокси-сервера для Apache.

Nginx – имеет хорошую производительность, и отлично работает со статическим содержимым, но не может обрабатывать динамическое содержимое.

Apache – может обрабатывать и динамическое и статическое содержимое, но имеет плохую производительность.

В прошлой статье, мы произвели установку и настройку LAMP с Apache. Сегодня будем модернизировать конфигурацию из прошлой статьи.

Установка Nginx.

  • Для начала подключаем репозиторий Nginx. В директории /etc/yum.repos.d/, создаём файл nginx.repo с таким содержанием:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
  • Устанавливаем Nginx.
# yum install nginx
  • Пока не будем запускать nginx, потому что на 80 порту у нас Apache.
  • В прошлой статье, в корневой директории сайта, мы создавали для проверки файл index.html. Удалим его, и создадим другой файл, с выводом информации о php.
# echo '<?php phpinfo();' > /var/www/test.ru/site/index.php
  • Открываем браузер, и заходим по адресу нашего сайта. Открывается страница с информацией о php.
страница с информацией о PHP

Настройка Apache для работы в связке с Nginx

  • Теперь нужно настроить Apache на работу на другом порту, можно использовать любой не занятый порт. Я буду использовать порт 8080.
  • Нам нужен файл /etc/httpd/conf/httpd.conf.
Находим
Listen 80
Меняем на
Listen 127.0.0.1:8080
изменение порта Apache
  • Нам также нужно изменить конфигурационные файлы виртуальных хостов.
  • Заходим в директорию /etc/httpd/conf.d/, и в файлах виртуальных хостов test.ru.conf и myadmin.test.ru.conf, которые мы создали в прошлой статье, производим необходимые изменения.
*:80
меняем на
*:8080
изменение виртуальных хостов для работы на другом порту
  • Чтобы изменения вступили в силу, перезапускаем Apache.
# systemctl restart httpd
  • Теперь можно запустить nginx. Запускаем его и добавляем в автозагрузку.
# systemctl start nginx
# systemctl enable nginx

Настройка Nginx для работы в связке с Apache

  • Переходим к настройке nginx. Заходим в директорию /etc/nginx/conf.d, и для каждого из работающих сайтов создаём конфигурационный файл.
  • Для сайта test.ru, это будет файл test.ru.conf, с таким содержанием:

server {
      listen 80;
      server_name test.ru www.test.ru; 
      index index.php index.html index.htm;
      access_log /var/log/nginx/test.ru.access.log main;
      error_log /var/log/nginx/test.ru.error.log;
	
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|swf|ttf|svg|html|txt)$ {
      root   /var/www/test.ru/site;
      access_log off;
      expires 3d;	
}

location / {
      proxy_pass http://127.0.0.1:8080/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_connect_timeout       120;
      proxy_send_timeout          120;
      proxy_read_timeout          180;
      proxy_buffering on;
      proxy_buffer_size           64k;
      proxy_buffers             8 64k;
      proxy_busy_buffers_size     64k;
      proxy_temp_file_write_size  10m;

      gzip on;
      gzip_disable "msie6";
      gzip_vary on;
      gzip_proxied any;
      gzip_comp_level 5;
      gzip_buffers 16 8k;
      gzip_http_version 1.1;
      gzip_min_length 256;
      gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

}
 
location ~ /\. {
      deny all; 
 }

}

конфигурационный файл сайта
  • Для веб-приложения phpmyadmin, это будет файл myadmin.test.ru.conf, с таким содержанием:

server {
      listen 80;
      server_name myadmin.test.ru www.myadmin.test.ru; 
      index index.php index.html index.htm;
      access_log /var/log/nginx/myadmin.test.ru.access.log main;
      error_log /var/log/nginx/myadmin.test.ru.error.log;
	
location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff|woff2|swf|ttf|svg|html|txt)$ {
      root   /var/www/myadmin.test.ru/site;
      access_log off;
      expires 3d;	
}

location / {
      proxy_pass http://127.0.0.1:8080/;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_connect_timeout       120;
      proxy_send_timeout          120;
      proxy_read_timeout          180;
      proxy_buffering on;
      proxy_buffer_size           64k;
      proxy_buffers             8 64k;
      proxy_busy_buffers_size     64k;
      proxy_temp_file_write_size  10m;

      gzip on;
      gzip_disable "msie6";
      gzip_vary on;
      gzip_proxied any;
      gzip_comp_level 5;
      gzip_buffers 16 8k;
      gzip_http_version 1.1;
      gzip_min_length 256;
      gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;

}
 
location ~ /\. {
      deny all; 
 }

}

конфигурационный файл phpmyadmin
  • Конфигурационные файлы состоят из нескольких секций, в частности добавлены полезные опции:
  1. Глобальные настройки.
  2. Кэширование статических объектов.
  3. Gzip-сжатие.
  4. Запрет доступа к файлам начинающимся с точки.
  • После создания конфигурационных файлов, перезапускаем Nginx и Apache.
# systemctl restart nginx
# systemctl restart httpd
  • На этом настройка связки Nginx и Apache завершена. Nginx работает в качестве кэширующего прокси-сервера для Apache.

Сегодня мы рассмотрели тему: "Nginx (front-end) + Apache (back-end)". Произвели установку и настройку связки Nginx и Apache. Смотрите также видео по теме.

Надеюсь статья была вам полезна. До встречи в новых статьях.

С уважением, Андрей Бондаренко.


Видео на тему "Nginx (front-end) + Apache (back-end)":