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

    Общий рейтинг статьи: 5 (проголосовало 1 )
    Опубликовано:  [просмотров 321]


    Вы наверное обращали на аббревиатуры 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-окружении.


    Связанные записи в блоге

    Обсуждение статьи

    Ваш комментарий: