nginx php fpm php freebsd
Настройка php-fpm и nginx на FREEBSD
Хочу рассказать об установке и настройке связки nginx+php-fpm. По общепризнанному мнению, такая комбинация работает быстрее, чем связка с apache. Я на своем опыте в этом убедился. При прочих равных условиях, сайт wordpress выдерживает большую нагрузку с nginx и php fpm, нежели apache и php.
Приступим. У нас имеется:
Обновим до последней версии с помощью вот этой инструкции. Проверяем, что получилось:
Отлично, обновления прошли. Я не буду давать общие рекомендации по настройке сервера, я их уже давал во 2-й части инструкции, ссылки на которую я приводил выше. Можно посмотреть при желании. Приступим сразу к делу.
Установка и настройка mysql на Freebsd
Добавляем Mysql в автозагрузку:
Создаем для него конфигурационный файл:
Конфигурацию каждый под свои потребности может сделать, описаний настроек в интернете много. Я предлагаю свой универсальный вариант:
В моем варианте сервер жестко привязан к локальному интерфейсу и удаленно с ним работать нельзя. Если вам нужны удаленные подключения, то в параметре bind-address добавьте внешний адрес сервера.
Создадим файл логов:
Проверяем, все ли в порядке:
Демон запущен и слушает локальный интерфейс.
Теперь запустим скрипт для настройки безопасности:
Задаем пароль для root и далее на все вопросы отвечаем утвердительно.
На этом установка и настройка mysql закончена. Идем дальше.
Установка и настройка PHP-FPM на Freebsd
Начиная с версии php 5.3 php-fpm идет как модуль, поэтому просто начинаем установку php и указываем в опциях fpm:
Ставим теперь дополнения php-extentions:
Дополнений много, все ставить не обязательно, можно будет остальное доставить потом в случае необходимости. Я обычно выбираю наиболее популярные и необходимые:
BZ2, CTYPE, CURL, DOM, EXIF, FILTER, FTP, GD, GETTEXT, HASH, ICONV, JSON, MBSTRING, MCRYPT, MYSQL, MYSQLI, PDF, PDO, PDO_SQLITE, PHAR, POSIX, SESSION, SIMPLEXML, SQLITE3, YOKENIZER, XML, XMLREADER, XMLWRITER, ZIP
Добавляем php-fpm в автозагрузку:
Редактируем файл с настройками, приводим его к следующему виду:
Проверяем синтаксис настроек:
Проверяем запустился ли:
Все в порядке. Идем дальше.
Установка и настройка nginx на Freebsd
Устанавливаем nginx на наш Freebsd сервер:
Выбираем настройки по-умолчанию.
Добавляем nginx в автозагрузку:
Редактируем файл настроек. Я приведу пример с двумя виртуальными серверами, на одном из которых будут настройки для wordpress, другой будет для phpmyadmin, я люблю его вешать на отдельный поддомен.
Создаем необходимые каталоги:
Почему-то nginx не смог создать папку во временном каталоге. Поможем ему сами:
Все в порядке. Наш web сервер на Freebsd готов. Запускаем nginx и проверяем, нормально ли запустился:
Все в порядке, сервер запущен и слушает 80-й порт. Теперь проверим работу web сервера с помощью тестовой странички. Создаем ее:
Переходим на сайт по адресу http://site1.ru Не забудьте настроить DNS для доступа к установленному серверу, либо отредактируйте в windows файл hosts, добавив туда строку:
где 192.168.1.21 адрес web сервера Freebsd 10.
Вы должны увидеть картинку.
Если видите ее у себя, поздравляю, вы все настроили правильно и web сервер полностью готов к работе. Остался только маленький штрих. Для удобства управления mysql установим phpmyadmin.
Установка phpmyadmin на web сервер Freebsd
Перемещаем файлы из установочной директории по-умолчанию в наш поддомен pma.site1.ru:
Настраиваем DNS записи на pma.site1.ru или просто добавляем в винде в файл hosts строку
И заходим по адресу http://pma.site1.ru
У вас должно открыться окно приветствия phpmyadmin. Вводим сюда пользователя и пароль root, которые мы задали в самом начале настройки и попадаем в панель управления базами.
На этом настройка web сервера на базе Freebsd 10.1 и связки nginx + php-fpm закончена.
Установка nginx + php-fpm + memcache + eaccelerator на FreeBSD
Зачем всё это? — спросите вы. Да просто захотелось поделиться с общественностью некоторым опытом, полученным в процессе оптимизации vds под нужды одного общеизвестного блого-социального движка, который на обычном хостинге чувствует себя, мягко скажем, некомфортно.
Началось всё с того, что я ушёл от firstvds, где уже ничто не спасёт от тормозов. Ушел на ганди.нет, взял одну шару (1 share), которую дали на месяц бесплатно. Кстати, акция эта (This summer, your server is free!) вроде еще не закончилась. 😉 И начал на этой шаре проводить зверские эксперименты с установкой разного ПО. Тестировал результаты с помощью siege.
В итоге конфигурация из сабжа оказалась самая быстрая. Опытом её установки и настройки я и хотел бы с вами поделиться.
Перво-наперво обновляем дерево портов, если давно этого не делали. А если никогда не делали, то без этого дальше никуда:
NGINX
# cd /usr/ports/www/nginx
# make install clean
Добавляем строку ‘nginx_enable=«YES»’ в файл ‘/etc/rc.conf’.
PHP-FPM
# cd /usr/ports/lang/php5
# make install clean
# cd /usr/ports/lang/php5-extensions
# make install clean
Добавляем строку ‘php_fpm_enable=”YES»‘ в файл ‘/etc/rc.conf’.
Дружим NGINX и PHP
events <
worker_connections 1024;
>
http <
include mime.types;
default_type application/octet-stream;
server <
listen 80;
server_name localhost;
location / <
root /usr/local/www/nginx;
index index.php index.html index.htm;
>
error_page 500 502 503 504 /50x.html;
location = /50x.html <
root /usr/local/www/nginx-dist;
>
\.php$ <
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name;
include fastcgi_params;
>
>
>
Детальное описание настроек конфигурационного файла можно найти тут и тут, поэтому подробно останавливаться не буду. Давеча вышла статья на Хабре про настройку nginx — рекомендую к просмотру.
Далее редактируем конфигурацию php-fpm. По-дефолту он лежит тут ‘/usr/local/etc/php-fpm.conf’. Находим в файле строки:
Тем самым указав пользователя и группу, под которыми будет крутиться php. Подробное описание этих и других настроек php-fpm есть на официальном сайте на русском языке.
MEMCACHE
# cd /usr/ports/databases/pecl-memcache
# make install clean
EACCELERATOR
# cd /usr/ports/www/eaccelerator
# make install clean
# mkdir /tmp/eaccelerator
# chown www /tmp/eaccelerator
# chmod 0700 /tmp/eaccelerator
РЕЗУЛЬТАТ
# /usr/local/etc/rc.d/php-fpm start
# /usr/local/etc/rc.d/nginx start
Пришло время проверить, получилось ли у нас что-нибудь. 🙂 Создаем файл ‘/usr/local/www/nginx/info.php’ c содержимым » «. И смотрим результат в браузере: httр://ваш-домен/info.рhр — должно быть как-то так:
За рамки данной заметки вышли: установка mysql (ставится так же просто, как и всё остальное из портов) и куча различных настроек, читай тюнинга, всего этого великолепия. Но это огромный материал, который регулярно освещается на Хабре в той или иной мере по частям. Есть ли смысл собирать тюнинг всей связки в одной статье — пока не знаю. Спасибо за внимание. Мой первый топик здесь за два года присутствия. 🙂
FreeBSD: установка и настройка NGINX + php-fpm
В данной статье описана самая базовая установка NGINX + php-fpm.
Установка производится на FreeBSD 9.0.
Приступаем к установке NGINX.
# make showconfig | grep on
===> The following configuration options are available for nginx-1.2.3_1,1:
HTTP=on: Enable HTTP module
HTTP_ADDITION=on: Enable http_addition module
HTTP_CACHE=on: Enable http_cache module
HTTP_DAV=on: Enable http_webdav module
HTTP_FLV=on: Enable http_flv module
HTTP_PERL=on: Enable http_perl module
HTTP_REALIP=on: Enable http_realip module
HTTP_REWRITE=on: Enable http_rewrite module
HTTP_SSL=on: Enable http_ssl module
HTTP_STATUS=on: Enable http_stub_status module
HTTP_SUB=on: Enable http_sub module
WWW=on: Enable html sample files
HTTP_RESPONSE=off: 3rd party http_response module
ENCRYPTSESSION=off: 3rd party encrypted_session module
ICONV=off: 3rd party iconv module
RDS_JSON=off: 3rd party rds_json module
====> Options available for the single VIDEO: you have to select exactly one of them
===> Use ‘make config’ to modify these settings
# make install clean
Редактируем файл конфигурации, приводим его к такому виду:
pid /var/run/nginx.pid;
error_log /var/log/nginx-error.log warn;
events <
worker_connections 1024;
use kqueue;
>
http <
include mime.types;
default_type application/octet-stream;
# nginx options
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
server_tokens off;
# fastcgi
fastcgi_intercept_errors on;
# virtual server
server <
listen 80;
server_name www.example.com.ua example.com.ua;
access_log /var/log/nginx.example.com.ua.log main;
# server root directory
location / <
root /usr/local/www/example.com.ua;
index index.php index.html index.htm;
>
.php$ <
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/local/www/example.com.ua$fastcgi_script_name;
include fastcgi_params;
>
>
>
# service nginx onestart
Performing sanity check on nginx configuration:
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
Starting nginx.
Если сам РНР уже установлен, его надо будет пересобрать. В версии PHP 5.3.3 и выше, модуль php-fpm можно установить во врем конфигурирования РНР.
Для более ранних версий — его надо скачать с оф. сайта проекта тут>>>.
Описание установки для старых версий, к примеру — 5.2.
# fetch http://rit-kpi.org/php-fpm/php-5.2.12-fpm-0.6.tar.gz
php-5.2.12-fpm-0.6.tar.gz 100% of 10 kB 3133 kBps
И выполняем установку:
# cd php5-fpm
make install clean
Вернемся к нашей установке.
# cd /usr/ports/lang/php5
# make config
Выбираем такие опции:
Редактируем файл конфигурации php-fpm :
[global]
pid = run/php-fpm.pid
[www]
user = www
group = www
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm-slow.log
Создадим файлы лога:
# touch /var/log/php-fpm-error.log
# touch /var/log/php-fpm-slow.log
# /usr/local/etc/rc.d/php-fpm onestart
Starting php_fpm.
# service php-fpm onestatus
php_fpm is running as pid 61317.
Создаем файл info.php с содержимым:
И сохраняем его в каталог, указанный в конфигурации NGINX:
И проверяем, заходя на страницу http://YOUR_IP/info.php
Если все работает — добавляем в файл /etc/rc.conf две строки:
Далее — выполняем установку расширений PHP и сервера MySQL.
Т.к. никаких отличий нет, то об это можно прочитать тут>>>.
Freebsd настройка php-fpm и nginx
Ранее я уже рассказывал, как установить и настроить Freebsd 10.1 в качестве web сервера ( 1 часть, 2 часть, 3 часть ) Там мы использовали Apache, nginx и php. Здесь же я хочу рассказать об установке и настройке связки nginx+php-fpm. По общепризнанному мнению, такая комбинация работает быстрее, чем связка с apache. Я на своем опыте в этом убедился. При прочих равных условиях, сайт wordpress выдерживает большую нагрузку с nginx и php fpm, нежели apache и php.
Приступим. У нас имеется:
Обновим до последней версии с помощью вот этой инструкции. Проверяем, что получилось:
Отлично, обновления прошли. Я не буду давать общие рекомендации по настройке сервера, я их уже давал во 2-й части инструкции, ссылки на которую я приводил выше. Можно посмотреть при желании. Приступим сразу к делу.
Установка и настройка mysql на Freebsd
Добавляем Mysql в автозагрузку:
Создаем для него конфигурационный файл:
Конфигурацию каждый под свои потребности может сделать, описаний настроек в интернете много. Я предлагаю свой универсальный вариант:
В моем варианте сервер жестко привязан к локальному интерфейсу и удаленно с ним работать нельзя. Если вам нужны удаленные подключения, то в параметре bind-address добавьте внешний адрес сервера.
Создадим файл логов:
Проверяем, все ли в порядке:
Демон запущен и слушает локальный интерфейс.
Теперь запустим скрипт для настройки безопасности:
Задаем пароль для root и далее на все вопросы отвечаем утвердительно:
На этом установка и настройка mysql закончена. Идем дальше.
Установка и настройка PHP-FPM на Freebsd
Начиная с версии php 5.3 php-fpm идет как модуль, поэтому просто начинаем установку php и указываем в опциях fpm:
Ставим теперь дополнения php-extentions:
Дополнений много, все ставить не обязательно, можно будет остальное доставить потом в случае необходимости. Я обычно выбираю наиболее популярные и необходимые:
BZ2, CTYPE, CURL, DOM, EXIF, FILTER, FTP, GD, GETTEXT, HASH, ICONV, JSON, MBSTRING, MCRYPT, MYSQL, MYSQLI, PDF, PDO, PDO_SQLITE, PHAR, POSIX, SESSION, SIMPLEXML, SQLITE3, YOKENIZER, XML, XMLREADER, XMLWRITER, ZIP
Добавляем php-fpm в автозагрузку:
Редактируем файл с настройками, приводим его к следующему виду:
Проверяем синтаксис настроек:
Проверяем запустился ли:
Все в порядке. Идем дальше.
Установка и настройка nginx на Freebsd
Устанавливаем nginx на наш Freebsd сервер:
Выбираем настройки по-умолчанию.
Добавляем nginx в автозагрузку:
Редактируем файл настроек. Я приведу пример с двумя виртуальными серверами, на одном из которых будут настройки для wordpress, другой будет для phpmyadmin, я люблю его вешать на отдельный поддомен.
Создаем необходимые каталоги:
Почему-то nginx не смог создать папку во временном каталоге. Поможем ему сами:
Все в порядке. Наш web сервер на Freebsd готов. Запускаем nginx и проверяем, нормально ли запустился:
Все в порядке, сервер запущен и слушает 80-й порт. Теперь проверим работу web сервера с помощью тестовой странички. Создаем ее:
Переходим на сайт по адресу http://site1.ru Не забудьте настроить DNS для доступа к установленному серверу, либо отредактируйте в windows файл hosts, добавив туда строку:
где 192.168.1.21 адрес web сервера Freebsd 10.
Вы должны увидеть картинку:
Если видите ее у себя, поздравляю, вы все настроили правильно и web сервер полностью готов к работе. Остался только маленький штрих. Для удобства управления mysql установим phpmyadmin.
Установка phpmyadmin на web сервер Freebsd
Перемещаем файлы из установочной директории по-умолчанию в наш поддомен pma.site1.ru:
Настраиваем DNS записи на pma.site1.ru или просто добавляем в винде в файл hosts строку
И заходим по адресу http://pma.site1.ru
У вас должно открыться окно приветствия phpmyadmin. Вводим сюда пользователя и пароль root, которые мы задали в самом начале настройки и попадаем в панель управления базами.
На этом настройка web сервера на базе Freebsd 10.1 и связки nginx + php-fpm закончена.
FreeBSD Nginx + php-fpm + mini_httpd + SSL
Когда на сервере необходимо поднять Web-сервер, который мог бы выполнять php скрипты, а также cgi и pl скрипты perl и не хочется устанавливать монстра Apache, то для этих целей подойдет связка:
Nginx — фронтэндом как веб-сервер
php-fpm — бэкэнд для выполнения php скриптов
mini_httpd — маленький http сервер, бэкэнд для выполнения cgi и pl скриптов.
И все это приправим еще прикручиванием SSL и на Nginx и на mini_httpd, чтобы максимально увеличить полезность данной статьи.
Все это будем проделывать на FreeBSD. На остальных Unix системах настраивается все также, различаются только пути до файлов и прочие мелочи.
Устанавливаем весь необходимый софт из портов
cd /usr/ports/www/nginx make install clean
Не забываем при установке проставить галочку на HTTP_SSL
Ставим php, также не забываем поставить галочку напротив FPM для установки php-fpm.
cd /usr/ports/lang/php5 make install clean
Если уже установили пакет без нужных элементов (это относится ко всем пакетам), то поможет деинсталляция, удаление конфига и установка пакета заново.
cd /usr/ports/пакет для деинсталяции make deinstall clean make rmconfig make install clean
Ставим mini_httpd
cd /usr/ports/www/mini_httpd make install clean
Добавляем строки в файл /etc/rc.conf
nginx_enable=»YES» php_fpm_enable=»YES» mini_httpd_enable=»YES»
Запускаем nginx и php-fpm
/usr/local/etc/rc.d/nginx start /usr/local/etc/rc.d/php-fpm start
Открываем браузер и проверяем работоспособность nginx, для этого вводим в адресную строку ip сервера, если все хорошо, то мы видим приветственную страницу nginx.
Идем далее
Настраиваем nginx
Для начала сгенерируем сертификаты для нашего HTTPS-сервера
Для этого создадим директорию под ключи и сертификаты и зайдем туда
mkdir /usr/local/etc/nginx/ssl cd /usr/local/etc/nginx/ssl
Далее займемся созданием сертификатов и ключей. Воспользуемся для этого openssl
Команда выше спросит информацию о будущем сертификате, если хочется вводим, либо пропускаем
По итогу имеем в папке 3 файла:
rsa.key — Приватный ключ
rsa.csr — CSR запрос для приватного ключа
rsa.crt — Самоподписанный сертификат
Если особо не вдаваться в настройки nginx и оставлять все максимально по умолчанию то конфиг должен получиться примерно таким:
Редактируем /usr/local/etc/nginx/nginx.conf
Здесь приведен не весь конфиг, только секции server, остальное все осталось по умолчанию.
server < listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / < root /usr/local/www; index index.php index.html index.htm; >#error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html < root /usr/local/www/nginx-dist; ># pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location
Не забываем перезагрузить nginx
Проверим работоспособность php скриптов и HTTPS-сервера. Для этого создадим файл test.php
Примерно такого содержания:
И положим его в папку /usr/local/www
Открываем в браузере http://xxx.xxx.xxx.xxx/test.php и видим информационную таблицу с версией php и т.д., значит все работает.
Теперь открываем https://xxx.xxx.xxx.xxx/test.php для проверки https
Сначала будет предупреждающее сообщение от браузера, о сертификате, о его недоверенности, не обращаем внимания и продолжаем, так как сертификат у нас самопальный, соответственно поэтому для браузера он недоверенный. Если сервер поднимается для внутренних целей то это не критично, если нет, то как сделать сертификат доверенным это уже тема отдельной статьи.
В итоге видим такую же таблицу как в первый раз, значит все нормально.
Настраиваем mini_httpd для выполнения cgi скриптов
По умолчанию mini_httpd ищет свой конфигурационный файл в папке /usr/local/www, так как многие считают что это не очень хорошая идея немножко подправим конфигурацию mini_httpd.
Для этого отредактируем файл /usr/local/sbin/mini_httpd_wrapper
И заменим эту строчку
Теперь создадим этот конфигурационный файл
Выглядеть он должен примерно так:
port=9001 cgipat=**.cgi user=www data_dir=/usr/local/www logfile=/var/log/mini_httpd.log pidfile=/var/run/mini_httpd.pid
Если хотим чтобы mini_httpd использовал SSL то файл должен выглядеть примерно так:
port=9001 cgipat=**.cgi user=www data_dir=/usr/local/www logfile=/var/log/mini_httpd.log pidfile=/var/run/mini_httpd.pid ssl certfile=/usr/local/etc/nginx/ssl/rsa.pem
Для создания rsa.pem необходимо соединить приватный ключ и сертификат в одном файле
touch rsa.pem cat rsa.key > rsa.pem cat rsa.crt >> rsa.pem
После проделанных действий перезагружаем mini_httpd
/usr/local/etc/rc.d/mini_httpd.sh stop /usr/local/etc/rc.d/mini_httpd.sh start
Хочется отметить что порой с перезагрузкой mini_httpd возникают непонятные проблемы из разряда:
bind: Address already in use /usr/local/sbin/mini_httpd: can’t bind to any address
Я не стал разбираться, а просто перезагрузил сервер. Если перезагрузка критична, то смотрите в сторону удаления файла /var/run/mini_httpd.pid и остановки mini_httpd командой kill
Пришло время проверить как выполняются cgi скрипты
Для этого создадим папку cgi-bin под скрипты и создадим там файл test.cgi
mkdir /usr/local/www/cgi-bin touch /usr/local/www/cgi-bin/test.cgi
Не забываем присвоить файлу права на выполнение
chmod 755 /usr/local/www/cgi-bin/test.cgi
Наш test.cgi должен быть примерно такого содержания:
#!/usr/local/bin/perl print «Content-type: text/htmlnn»; print «
Hello World
Теперь открываем в браузере http://xxx.xxx.xxx.xxx/cgi-bin/test.cgi
и https://xxx.xxx.xxx.xxx/cgi-bin/test.cgi
В обоих случаях мы должны увидеть надпись «Hello World».