Типовые примеры настройки PHP-FPM + Nginx в Ubuntu Linux

HELP-ME-24.COM (Freelance Team), Черноусов Антон

Вы наверное обращали на аббревиатуры LAMP и LEMP. С точки зрения web-разработчика эти связки практически одинаковые, а вот с позиции системного администратора они кардинально отличаются.

Некоторое время назад вспыхивали достаточно яркие холивары на тему LAMP vs LEMP, но последнее время споры утихли, но заказчики теперь считают, что Nginx+PHP-FPM работает быстрее Apache+ModPHP и довольно часто приходится переписывать конфигурации с LAMP на LEMP.

Представляю вашему вниманию первую часть небольшого справочника по типовым настройкам связки PHP-FPM и Nginx. Именно такая конфигурация последнее время наиболее востребованной, а связка Apache+Mod_php уходит на второй план.

Если не вдаваться в подробности, то основным отличием является отсутствие .htaccess и в сети даже есть специальные конверторы которые позволяют конвертировать конфигурационный файл Apache в конфигурационный файл Nginx, но они на сложных конфигурациях работают не всегда правильно и приходится использовать "голову", а для использования головы необходимо некоторое понимание как это хозяйство вообще работает.

Обработка только статических файлов

Простейшая реализация конфигурации для отдачи статических файлов:

server {
   listen 80;
   server_name files.help-me-24.com;

   access_log /var/log/nginx/files.help-me-24.com.log;
   error_log /var/log/nginx/files.help-me-24.com-error.log;

   location / {
       alias /var/www/vhosts/files.help-me-24.com/;
       index index.html;
       autoindex off;
   }

}

В данной конфигурации никаких скриптов не исполняется и клиенту отдаются только статические файлы из каталога /var/www/vhosts/files.help-me-24.com/. 

  • index index.html - индекным файлом является index.html
  • autoindex off - отображение содержимого каталога отключено

Подключение ssl-сертификата в Nginx

Для подключения ssl-сертификата приведите конфигурационный файл к следующему виду:

server {
   listen 443 ssl;
   ssl_certificate /etc/letsencrypt/live/files.help-me-24.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/files.help-me-24.com/privkey.pem;
   ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
   ssl_prefer_server_ciphers on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;
   ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:
DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES
128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:
ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:
ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES12
8-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:
DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:
AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:
!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:
!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:50m;
   ssl_stapling on;
   ssl_stapling_verify on;
   server_name files.help-me-24.com;

   access_log /var/log/nginx/ssl-files.help-me-24.com.log;
   error_log /var/log/nginx/ssl-files.help-me-24.com-error.log;

   location / {
       alias /var/www/vhosts/files.help-me-24.com/;
       index index.html;
       autoindex off;
   }

}

Параметр ssl_ciphers можно не указывать и в нашем случае он запрещает использование устаревших механизмов защиты соединения.

Пути к ключам указаны для случая использования Let's encrypt и вам дополнительно потребуется сгенерировать файл dhparam.pem.

Для его создания используется команда:

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Отключение автозапуска Apache при старте сервера и запуск Nginx

При миграции с Apache на Nginx иногда забывают выполнить эту процеду и после перезагрузки Nginx не запускается, так как порты 80 и 443 уже заняты Apache.

Для отключения автозапуска Apache и настройки автозапуска Nginx выполните следующие команды:

# update-rc.d -f apache2 disable
# update-rc.d -f nginx enable

Простейшая конфигурация для запуска PHP-скриптов (Nginx+PHP-FPM)

Прежде всего необходимо установить собственно сам PHP-FPM и для этого выполните в консоли от имени суперпользователя root команду:

# aptitude install php7.1-fpm

Обратите внимание, что если у вас подключено несколько репозиториев для разных версий PHP, то и обработчики PHP-FPM будут разные и вы можете использовать несколько сразу для разных версий PHP.

По умолчанию рабочий сокет процесса PHP-FPM 7.1 находится в файле /var/run/php/php7.1-fpm.sock, для других версий PHP соответственно имена сокетов будут отличаться и таким образом и достигается мультиверсионность интерпретаторов для web-приложений на шаред-хостингах.

Конфигурационный файл соответственно находится с каталоге /etc/php/7.1/fpm/ в этом каталоге представлен основной конфигурационный файл PHP-FPM и каталог pool.d для настроек отдельных приложений. В простейшем виде конфигурационный файл Nginx который сможет интерпретировать php-файлы выглядит следующим образом:

server {
    listen 80;
    server_name test.help-me-24.com;
    root /var/www/vhosts/cloud.help-me-24.com/;

    access_log /var/log/nginx/test.help-me-24.com.log;
    error_log /var/log/nginx/test.help-me-24.com-error.log;

    location / {
        index index.php index.html index.htm;
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
        include fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }

    location ~ /\.ht {
        deny all;
    }

}

Такого конфигурационного файла достаточно разве, что для тестирования приложения и если вы посмотрите список процессов, то в конфигурации по умолчанию вы увидите один пул приложений www обслуживаемый php-fpm. Именно его параметры и используются для каталога /var/www/.

Переопределение параметров конфигурации PHP

В простейшем виде вы можете переопределить ряд параметров прямо в конфигурационном файле Nginx используя переменную fastcgi_param PHP_VALUE. Такой подход не вникая в его детали я уже демонстрировал при настройке PHP-FPM-окружения для запуска Zabbix.

Для переопределения параметров или файла конфигурации Nginx добавьте следующую конструкцию в раздел location ~ \.php$ {.

fastcgi_param PHP_VALUE "
  max_execution_time = 300
  memory_limit = 128M
  post_max_size = 16M
  upload_max_filesize = 2M
  max_input_time = 300
  date.timezone = Asia/Novosibirsk
  always_populate_raw_post_data = -1";
}

Таким образом мы переопределяем базовые параметры заданные для пула приложений. В следующей статье мы рассмотрим подробнее пул PHP-приложений и запустим реальное PHP-приложение в LEMP-окружении.

Оставьте комментарий

Вы должны быть вошедший в чтобы отправить комментарий