Loading...
Хостинги/Домены | Веб-сервер на основе Nginx и PHP-FPM
Настройка
Настройка состоит из двух этапов — настройки «Nginx» и «PHP-FPM». Для начала необходимо остановить процессы (демоны) «Nginx» и «PHP-FPM», например, командами
sudo service nginx stop
sudo service php5-fpm stop
Настройка PHP-FPM
Прежде всего, следует открыть файл «/etc/php5/fpm/php.ini» для редактирования, например, командой
sudo gedit /etc/php5/fpm/php.ini
после чего, найти строчку содержащую «cgi.fix_pathinfo», которая по-умолчанию выглядит так (закомментирована)
;cgi.fix_pathinfo = 1
и привести её к виду
cgi.fix_pathinfo = 0
И сохранить изменения. Это призвано устранить опасность неправильно трактования (и возникающей уязвимости) запросов вида «/image.gif/foo.php»
Далее, необходимо отрыть для редактирования файл «/etc/php5/fpm/pool.d/www.conf», например, командой
sudo gedit /etc/php5/fpm/pool.d/www.conf
найти строчку с параметров «security.limit_extensions» и привести её к виду
security.limit_extensions = .php .php3 .php4 .php5
Эта настройка ограничит выполнение файлов по расширению имени. В этом же файле найти строчку с параметром «listen» и привести её к виду
listen = /var/run/php5-fpm.sock
Это определит файл для связи «Nginx» с «PHP-FPM» (сокет). В целях безопасности запрещаем какой-попало программе писать в сокет
параметров «listen.owner», «listen.group» и «listen.mode» (по-умолчанию они закомментированы) и приводим их к виду
listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Следует сохранить изменения в файле и перезапустить «PHP-FPM», например, командой
sudo service php5-fpm restart
Можно убедится в том, что права доступа к сокету установлены верно:
ls -la /var/run/php5-fpm.sock
Права доступа должны быть «srw-rw—-», владелец «www-data» (группа «www-data»), например,
srw-rw---- 1 www-data www-data 0 May 2 16:36 /var/run/php5-fpm.sock
Настройка Nginx
Основные настройки «Nginx» хранятся в файле «/etc/nginx/nginx.conf». Настройки базового сайта хранятся в файле «/etc/nginx/sites-available/default». Базовый конфигурационный файл сайта принято помещать в папку «/etc/nginx/sites-available/» и затем включить его путём добавления символической ссылки на этот файл в папке «/etc/nginx/sites-enabled/». Например, создадим конфигурационный файл для сайта с доменным именем (для примера выбрано «example.com») в названии для удобства
sudo touch/etc/nginx/sites-available/example.com
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

и откроем его для редактирования
sudo gedit /etc/nginx/sites-available/example.com
При редактировании данного файла необходимо учитывать синтаксис конфигурации «Nginx»
Описывать конфигурацию сайта в одном файле не очень удобно, для увеличения читабельности конфигурационного файла и гибкости настройки можно воспользоваться директивой «include» позволяющей указать «Nginx», что следует загрузить другой конфигурационный файл и затем продолжить чтение текущего. Создадим в папке «/etc/nginx/» каталог «common», где будут хранится общие настройки для сайта, которые затем будут подгружаться из основного конфигурационного файла «/etc/nginx/sites-available/example.com» с помощью директивы «include»
sudo mkdir /etc/nginx/common
Некоторые запросы «Nginx» будет перенаправлять к «PHP-FPM», который в данном случае называется сервером выгрузки данных (upstream). Укажем как следует это делать. Создадим файл конфигурации с описанием серверов выгрузки данных
sudo touch /etc/nginx/common/upstream
и откроем его для редактирования
sudo gedit /etc/nginx/common/upstream
и добавим в него строчки
upstream php-fpm
{
# PHP5-FPM сервер
server unix:/var/run/php5-fpm.sock;
}

где «php-fpm» – название для сервера выгрузки данных, для удобства.
Редактируем файл «/etc/nginx/sites-available/example.com». Добавляем строчку
include common/upstream;
для загрузки созданого выше конфигурационного файла. Как можно видеть – допускается указание относительного пути к файлу.
Далее описываем перенаправление от HTTP к HTTPS, если, конечно, это планируется. В таком случае необходимо наличие сертификатов для HTTPS
server
{
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}

иначе, можно опустить эти строчки.
Начинаем описывать конфигурацию сайта
server
{

Сетевой порт для приема соединений: 80 — обычный HTTP; 443 — HTTPS (см. выше)
# Порты
listen80;
listen443ssl;# использовать шифрование для этого порта

Корневая директория сайта работающего на данном сервере
root/var/www;
Возможные имена индексных файлов (их «Nginx» пытается открыть если он получил запрос вида «example.com/», вместо явного «example.com/index.html»)
indexindex.php index.html index.htm;
Имя сервера – обычно доменное имя Вашего сервера
server_nameh2m.name www.h2m.name;
Настройка шифрования SSL (если оно требуется, см. выше). Необходимо наличие сертификата «*.crt» или «*.pem» и приватного секретного ключа «*.key»
Самоподписанный сертификат можно сгенерировать командой в терминале
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
При этом программа запросит данные, среди них «commmon name» — следует указать доменное имя сервера. Можно использовать шаблон, если необходимо учесть домены нижнего уровня, например, «*example.com». Иначе могут возникнуть проблемы с некоторыми программами, например, «davfs2»
Решил набить посты копипастом с гугла? :D
Устаревший способ включения «HTTPS», сейчас не используется, просто для примера
ssl on;# шифрование включено
Для удобства описываем настройки шифрования во внешнем файле «/etc/nginx/common/ssl»
sudo touch /etc/nginx/common/ssl
Редактируем файл «/etc/nginx/common/ssl»
sudo gedit /etc/nginx/common/ssl
Файлы сертификатов для «HTTPS»
ssl_certificate /etc/ssl/certs/example.com_nginx.crt;# сертификат (можно свободно распространять)
ssl_certificate_key /etc/ssl/private/example.com_nginx.key;# приватный ключ (секретный файл - НИКОМУ НЕ ПОКАЗЫВАТЬ)

Дополнительные параметры требуемые для «HTTPS»
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;# указание протоколов шифрования (не использовать SSLv3, уязвимо)
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;

На этом настройки «SSL» в «Nginx» завершены, сохраняем и закрываем файл.
Продолжаем редактировать файл «/etc/nginx/sites-available/example.com». Подгружаем созданный выше конфигурационный файл с описанием настроек SSL
# Настройка шифрования SSL
include common/ssl;

Различные настройки. Указание максимального размера запроса – необходимо если сервер будет использоваться для загрузки больших файлов (например, для построения небольшого облачного хранилища)
client_max_body_size1000m;# увеличение максимального объема файла для загрузки до 1ГБ
Далее указание директорий сайта и правил работы с ними с использованием директив «location». Данная директива может обрабатывать регулярные выражения «Perl»
Онлайн: 1
Время:
Gen. 0.1158
(c) Bym.Guru 2010-2026