В этой заметке я предлагаю перевод лучшей, я считаю, инструкции по быстрой установке и настройке Nginx, MySQL и PHP-FPM на сервер под упралением FreeBSD 10.1
Введение
Nginx, MySQL и PHP-FPM могут в связке создать очень быстрый и мощный веб-сервер. Эти три вещи могут быть быстро установлены и сконфигурированы на сервере FreeBSD и назывывается такой набор – FEMP stack. Этот набор обладает рядом приимуществ.
Установка компонентов
Для начала установки мы должны использовать систему установки пакетов FreeBSD. Команда “install” установит все необходимые перечисленные пакеты:
sudo pkg install nginx mysql56-server php56 php56-mysql
Подтверждаем установку пакетов нажав “Y”, затем Enter.
Сделаем рехэш:
rehash
После окончания установки пакетов можно приступать к настройке.
Включаем все компоненты
In the last section, we downloaded three separate services that will need to run on our server.
Любые установленные службы FreeBSD нуждаются в разрешении запуска. Посмотреть, что нам нужно разрешить можно следующей командой:
grep rcvar /usr/local/etc/rc.d/*
Получаем что-то вроде этого:
/usr/local/etc/rc.d/avahi-daemon:rcvar=avahi_daemon_enable /usr/local/etc/rc.d/avahi-dnsconfd:rcvar=avahi_dnsconfd_enable /usr/local/etc/rc.d/dbus:rcvar=dbus_enable /usr/local/etc/rc.d/mysql-server:rcvar=mysql_enable /usr/local/etc/rc.d/nginx:rcvar=nginx_enable /usr/local/etc/rc.d/php-fpm:rcvar=php_fpm_enable /usr/local/etc/rc.d/rsyncd:rcvar=rsyncd_enable
И чтобы разрешить наши службы, нам необходимо отредактировать файл /etc/rc.conf (необходимо иметь доступ root):
sudo vi /etc/rc.conf
И добавим в него следующие строки:
mysql_enable="YES" nginx_enable="YES" php_fpm_enable="YES"
Сохраняем и закрываем файл.
Настроим PHP
Следующий шаг – настройка PHP-FPM службы.
Перейдем в каталог /usr/local/etc:
cd /usr/local/etc
И отредактируем конфиг:
sudo vi php-fpm.conf
Внутри мы видим много настроек, но нам надо изменить всего несколько. Сначала настроим на исколькование Unix сокета вместо использования порта. Это более безопасный вариант работы PHP-FPM.
Ищем такую строку:
listen = 127.0.0.1:9000
И меняем на такую:
listen = /var/run/php-fpm.sock
далее нам нужно настроить права доступа к директории веб-сервера. Ищем следующие строки:
;listen.owner = www ;listen.group = www ;listen.mode = 0660
Раскомментируем их:
listen.owner = www listen.group = www listen.mode = 0660
Сохраняем и закрываем файл.
Далее нам нужно создать файл php.ini, скопируем его из примера:
sudo cp php.ini-production php.ini
Открываем и редактируем:
sudo vi php.ini
Внутри нам нужно найти параметр cgi.fix_pathinfo, раскомментировать его и установить значание “0”.
Получится вот так:
cgi.fix_pathinfo=0
Сохраняем и закрываем файл.
Теперь мы имеем настроенный PHP-FPM и мы можем его запустить:
sudo service php-fpm start
Переходим к настройке MySQL.
Настройка MySQL
Перед настройкой MySQL нам нужно его запустить:
sudo service mysql-server start
После того, как MySQL сервер запущен, мы вызываем mysql_secure_installation, и настраиваем по шагам:
sudo mysql_secure_installation
. . . Enter current password for root (enter for none):
Скрип спрашиваем MySQL root пароль. И так как у нас его еще нет, нажимаем “ENTER”.
Set root password? [Y/n]
Далее нам нужно указать каким будет пароль MySQL пользователя root. Жмем “ENTER” чтобы подтвердить. Устанавливаем пароль, подтверждаем.
Далее будут другие настройки безопасности. На начальном этапе рекомендуется отвечать утвердительно просто нажимая “ENTER”.
Перезагрузим сервер MySQL для применения настроек:
sudo service mysql-server restart
Наш сервер MySQL готов к использованию.
Настройка Nginx
Наша следующая задача – настроить Nginx. Для начала запустим веб-сервер:
sudo service nginx start
Перейдем в директорию с конфигурациями:
cd /usr/local/etc/nginx
Откроем конфиг:
sudo vi nginx.conf
Внутри кое-что поменяем. Расскоментируем (если параметр закомментирован) параметр “user” и отредактируем до следующего вида:
user www;
Выставим количество воркеров в соответствии с количеством ядер в процессоре вашего сервера. (Чтобы узнать количество ядер пишем в консоли sysctl hw.ncpu и жмем Enter):
worker_processes 4;
Далее настроим логирование ошибок в параметре error_log:
error_log /var/log/nginx/error.log info;
Укажем путь к логу доступа:
access_log /var/log/nginx/access.log;
В блоке server мы должны изменить директиву server_name на имя сервера или его IP, а так же можем указать другой порт:
server {
listen 80;
server_name example.com www.example.com;
. . .
Укажем путь к корневой директории веб-сервера и index файлы. Можно указать специфический путь, напрмер, к странице с ошибкой 404:
server {
. . .
root /usr/local/www/nginx;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
. . .
Нам осталось добавить директивы, чтобы работал php.
Приведем соответствующий блок к следующему виду:
server {
. . .
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
Итак. Вся конфигурация Nginx без комментариев будет выглядеть как-то так:
user www;
worker_processes 4;
error_log /var/log/nginx/error.log info;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name example.com www.example.com;
root /usr/local/www/nginx;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
include fastcgi_params;
}
}
}
Сохраняем и закрываем конфиг.
Создадим директорию для логирования:
sudo mkdir -p /var/log/nginx
Дале создадим пустые файлы в ней:
sudo touch /var/log/nginx/access.log sudo touch /var/log/nginx/error.log
Теперь мы готовы перейти к корневой директории нашего веб-сервера. Удалим ссылку и создадим нормальную директорию:
sudo rm /usr/local/www/nginx sudo mkdir /usr/local/www/nginx
Скопируем в нее наш главный файл index.html:
sudo cp /usr/local/www/nginx-dist/index.html /usr/local/www/nginx
Для проверки работы php создадим файл info.php:
sudo vi /usr/local/www/nginx/info.php
Поместим в него код, котрый покажет нам информацию о компонентах PHP:
<?php phpinfo(); ?>
Сохраняем и закрываем.
Проверяем конфиг на ошибки командой:
sudo nginx -t
Если в конфигурации есть ошибки, мы увидим что-то вроде этого:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Тогда смотрим логи.
Если же все хорошо, перезагружаем Nginx для применения новой конфигурации:
sudo service nginx restart
Тестируем сервер
Итак, все готово! Перейдем в браузере на наш сервер (можно по имени, можно по IP адресу):
http://example.com
И видим содержимое страницы index.html:
Это говорит о том, что наш веб-сервер работает.
Далее проверим работу модуля PHP добавив к адресу /info.php:
http://example.com/info.php
Если все работает, мы увидим что-то подобное:
Поздравляю, мы только что настроили FEMP веб-сервер на FreeBSD.
Удалим ненужный файл info.php:
sudo rm /usr/local/www/nginx/info.php
Послесловие
Теперь у нас есть отличный веб-сервер на базе Nginx с поддержкой PHP контента и базами данных MySQL. Связка этих трех компонентов показывает отличные характеристики и пока лидирует среди конкурентов.