|
|||||||
Установка php-fpm и nginx на Debian 8
Время создания: 13.07.2018 15:32
Автор: https://rusadmin.biz/author/rusadmin/
Текстовые метки: linux debian nginx php install
Раздел: Debian
Запись: Velonski/mytetra-database/master/base/1489468452bbyi7ox8c3/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
От стабильной и быстрой работы сервера зависит судьба сайта. Его медленная работа и частые падения способны отпугнуть как посетителей, так и поисковые системы. Последние ещё и понизят рейтинг тормозящего сайта в результатах поиска и он окажется не в топ-10, а, скажем, в топ-100 по всем запросам. Использование связки nginx и php-fpm для обслуживания сайтов позволяет увеличить скорость их работы, а также стабильность системы в целом. К тому же, отказавшись от использования apache, мы несколько упрощаем систему и даже защищаем её. Ведь если нет apache, то злоумышленник не сможет использовать, например, файл .htaccess для своих целей. Связку nginx+php-fpm настраивать довольно легко и она поддерживается многими популярными CMS: WordPress, MODX, DLE, различными фреймворками. Всё это способно работать и без громоздкого apache. При установке веб-сервера, не обойтись без создания пользователей. В идеале, для каждого сайта должен быть создан отдельный юзер. Так мы сможем защитить другие сайты, если один из пользователей будет взломан. Примеры в этой статье написаны с учётом того, что пользователей вы создали по инструкции . Для начала установим базовые модули: php-fpm, mysql, curl, GD. Всё остальное — по индивидуальной необходимости. # aptitude install nginx php5-fpm php5-mysqlnd php5-curl php5-gd
Конфигурационные файлы располагаются в каталоге /etc/php5/fpm/. Настраиваем php-пул для обслуживания запросов Изначально в php-fpm есть только один пул по имени www. Мы будем использовать его в качестве основы для других пулов. Откроем конфигурационный файл /etc/php5/fpm/pool.d/www.conf, рассмотрим некоторые переменные и подберём для них значения. Первая переменная — это имя пула. Оно заключается в квадратные скобки и не может совпадать с именем любого существующего в системе пользователя. [www] Далее указываем имя пользователя и его группу, в чьём домашнем каталоге располагается сайт. user = username
group = www-data
Указываем, что пул должен работать в качестве unix-сокета. Переменная $pool будет заменена на имя. listen = /var/run/php-$pool.sock Определяем использование статического режима, при котором во время запуска fpm создаётся определённое количество процессов пула. Они обслуживают все поступающие запросы. pm = static Почему именно такой выбор? :) Это самый экономный вариант. Каждый процесс пула будет занимать объём оперативной памяти, выделенный переменной memory_limit плюс несколько мегабайт на подключённые модули, кэш и т.п. При статичном варианте все запросы будут обрабатываться только созданными процессами, а новые порождаться (и занимать драгоценную память) не будут. В итоге получим фиксированное потребление памяти. Указываем необходимое количество процессов, обслуживающих запросы. Подбирается в зависимости от загруженности. pm.max_children = 3 Следующие параметры рекомендую добавить в конец конфигурационного файла пула. Каталог для размещения временных файлов: php_admin_value[upload_tmp_dir] = "/var/www/username/tmp"
Каталог для хранения файлов сессий: php_admin_value[session.save_path] = "/var/www/username/sessions"
По соображениям безопасности, доступ к этим каталогам должен быть только у пользователя, с правами которого запускается пул php-fpm. Также не следует использовать один каталог и для хранения файлов сессий, и для временных файлов. Ограничение памяти для выполнения скриптов следует подбирать, исходя из требований сайта. Для начала: php_admin_value[memory_limit] = 50M
Укажите обязательный параметр, который устраняет уязвимость : php_admin_value[cgi.fix_pathinfo] = 0
Переменные sendmail_path и open_basedir не указываются специально. Они будут переданы в качестве параметров fast-cgi в конфигурационном файле nginx. Таким образом, для каждого конкретного сайта можно определить свою настройку. :) После того, как все необходимые параметры прописаны, следует перезагрузить конфигурацию php-fpm командой: # service php5-fpm reload
Обработка php скриптов посредством nginx Остаётся настроить nginx для работы с php-fpm. Готовый конфиг server {
server_name example.com; listen 80;
access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; charset utf-8;
index index.php;
root /var/www
location / {
try_files $uri $uri/ /index.php$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/run/php-www.sock;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";
}
}
example.com заменяем на свой домен. Описание параметров: try_files $uri =404; отобразит ошибку 404 в браузере пользователя, вместо сообщения no input file specified, в случае, когда данная ошибка имеет место. fastcgi_pass — путь к сокету php-fpm. fastcgi_pass unix:/run/php-www.sock;
Следующая переменная устанавливает путь к sendmail и параметр, указывающий адрес электропочты администратора сайта. Замените mail@example.com на что-то своё. fastcgi_param PHP_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com";
Перечисляем каталоги для open_basedir: каталог с сайтом, каталог для сохранения временных файлов, каталог для файлов сессий. fastcgi_param PHP_ADMIN_VALUE "open_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";
Если требуется передать несколько параметров, до делать это следует так: fastcgi_param PHP_ADMIN_VALUE "sendmail_path=/usr/sbin/sendmail -t -i -fmail@example.com\nopen_basedir=/var/www/example.com/:/var/save_path/:/var/tmp_dir/";
Как можно заметить, параметры разделяются при помощи переноса строки: \n. Сохраняем все проделанные изменения и перезапускаем nginx. # service nginx reload |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|