Настройка nginx, php-fpm, php-apc на Debian’е

Настройка nginx, php-fpm, php-apcСвязка nginx, php-fpm, php-apc позволяет ускорить работу сайта при правильной настройке по сравнению с apache и снизить нагрузку на сервер. Особенно это актуально при настройке работы сайтов с большим количеством посещений. Это сочетание компонентов в последнее время становится все более популярным, но настройка при этом достаточно несложная и делается быстро. Давайте посмотрим пример настройки на Debian’e. Настроим nginx с кэшем + php-fpm + php-apc.

Для начала вспомним, что это за компоненты. Nginx — это быстрый и гибкий веб-сервер, который к тому же позволяет использовать кеширование. Php-fpm — это PHP FastCGI Process Manager, менеджер процессов FastCGI для PHP. FastCGI — это бинарный протокол клиент-серверного взаимодействия, позволяющий обрабатывать запросы многопоточно, в отличие от однопоточного CGI. А php-apc — это Alternative PHP Cache, свободный фреймворк для кеширования байт-кода PHP в памяти, что в разы может ускорить выполнение PHP, при неоднократном использовании кода, естественно. Таким образом, ускорение должно быть в нескольких местах. Первое — кэш nginx’а, второе — более быстрая отдача статики при помощи nginx’а по сравнению с apache, третье — кэширование байт-кода PHP, четвертое — более быстрое исполнение кода php при помощи php-fpm по сравнению со связкой apache + mod_php5.

Установка пакетов

Устанавливаем пакеты:

apt-get install nginx php5-fpm php-apc php5-mysql

Всё необходимое установится по зависимостям

Настройка nginx

После установки пакетов необходимо задать настройки для nginx. Создаем файл настроек nginx для нашего сайта, назовем его «site»

touch /etc/nginx/sites-available/site

В файл запишем следующее:

server {

    # Слушаем 80 порт по IPv4
    listen 0.0.0.0:80;
    # Название сайта (доменное имя)
    server_name site;
    # Индексный файл
    index index.php;
    # Корневая директория сайта
    root /var/www/site;

    # Запрещаем доступ к файлам .htaccess и .htpasswd
    location ~ /\.ht {
        deny all;
    }

    # Отдача статики
    location ~ \.(jpg|jpeg|ico|gif|css){
        # Отключаем записи об отдаче статических файлов 
        # Это поможет снизить количество операций записи на диск
        access_log off;
        expires max;
        root /var/www/site;
    }

    location ~ \.php {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass unix:/var/run/php-fpm-site;
        fastcgi_index index.php;
        # Включаем кэш nginx, подключаем зону my-cache
        proxy_cache my-cache;
        # Таймауты хранения страниц в кэше в зависимости
        # от ответа сервера. 200 и 302 - 60 минут, 404 - 1 минута
        proxy_cache_valid 200 302 60m;
        proxy_cache_valid 404 1m;
        # Директория для временного хранения
        proxy_temp_path /var/cache/nginx/tmp;
    }
}

Теперь сделаем символическую ссылку, чтобы сайт заработал.

ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled

В файл /etc/nginx/nginx.conf надо добавить кэш, который мы уже записали для использования. В начало секции http вставляем следующую строчку:

proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my-cache:8m max_size=128m inactive=600m;

Эта строчка означает следующее: директория для хранения кэша — /var/cache/nginx. levels — уровни кэширования 1:2, это уровни вложенности директорий в директории для хранения кэша. Параметр keys_zone определяет название и объем зоны кэша (зон может быть несколько). Зона размером 1 мегабайт может хранить 8000 ключей. Параметр max_size определяет максимальный объем кэша, когда кэш достигнет этого объема, то старые файлы из кэша будут удаляться, чтобы освободить место. Если данные не будут запрошены из кэша в течение времени, указанного в параметре inactive (в нашем случае 600 минут), то они будут удалены из кэша. Если параметр inactive не указан, по умолчанию время составляет 10 минут.

Настройка php-fpm

Настройки php-fpm находятся в директории /etc/php5/fpm. В этой директории есть поддиректория pool.d, в которой хранятся файлы для работы с сайтами. Нам нужно создать файл для нашего сайта. Назовем его site.conf

touch /etc/php5/fpm/pool.d/site.conf

В этот файл записываем следующее:

[site]

# Сокет-файл для обмена данными с nginx
listen = /var/run/php-fpm-site.sock
# Максимально доступное в системе количество соединений
listen.backlog = -1
# Владелец сокета и группа владения
listen.owner = www-data
listen.group = www-data
# Права, устанавливаемые при создании сокета
listen.mode = 660

user = www-data
group = www-data

# Количество процессов будет контролироваться динамически
pm = dynamic
pm.max_children = 30
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 50

env[HOSTNAME] = site
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TEMP] = /tmp
env[TMPDIR] = /tmp

Теперь можно запускать php-fpm командой

service php5-fpm start

И после этого так же запустить nginx

service nginx start

Давайте создадим директорию /var/www/site, если она еще не создана:

mkdir -p /var/www/site

А в этой директории создадим файл /var/www/site/index.php со следующим содержимым:

Теперь в браузере откроем наш сервер по доменному имени. Например, «http://site». Должна открыться страница с информацией о сервере. Там же перечислены все модули, которые используются. В этом списке должен присутствовать модуль apc, и его статус должен быть «Enabled».

Настройка php-apc

Конфигурационный файл apc находится по следующему пути: /etc/php/fpm/conf.d/20-apc.ini

В принципе, с настройками по умолчанию этот модуль уже можно использовать, но если хотите настроить его более тонко, то описание всех параметров можно посмотреть здесь.

В целом конфигурация готова, можно разворачивать сайт и настраивать все эти компоненты более детально, в зависимости от того, как устроен сайт и какая статистика будет накоплена в процессе его работы.

 

Настройка nginx, php-fpm, php-apc на Debian’е: 2 комментария

  1. Oracle

    Не удается настроить кэш в Nginx. Не совсем понимаю как работает my-cache в вашем примере и что это вообще. Переменная, которая используется в proxy_cache_path? У меня Nginx не запускается с таким конфигом…

    1. Maxim Norin Автор записи

      my-cache — это название кэш-зоны, которая определяется в файле nginx.conf и потом используется в файле /etc/nginx/sites-available/site.
      Что nginx пишет в лог?

Обсуждение закрыто.