Freebsd настройка php-fpm и nginx
Ранее я уже рассказывал, как установить и настроить Freebsd 10.1 в качестве web сервера ( 1 часть, 2 часть, 3 часть ) Там мы использовали Apache, nginx и php.
Здесь же я хочу рассказать об установке и настройке связки nginx+php-fpm. По общепризнанному мнению, такая комбинация работает быстрее, чем связка с apache. Я на своем опыте в этом убедился.
При прочих равных условиях, сайт wordpress выдерживает большую нагрузку с nginx и php fpm, нежели apache и php.
Приступим. У нас имеется:
# uname -v FreeBSD 10.1-RELEASE
Обновим до последней версии с помощью вот этой инструкции. Проверяем, что получилось:
# uname -v FreeBSD 10.1-RELEASE-p8
Отлично, обновления прошли. Я не буду давать общие рекомендации по настройке сервера, я их уже давал во 2-й части инструкции, ссылки на которую я приводил выше. Можно посмотреть при желании. Приступим сразу к делу.
Установка и настройка mysql на Freebsd
Устанавливаем mysql:
# cd /usr/ports/databases/mysql55-server # make config-recursive # make install clean
Добавляем Mysql в автозагрузку:
echo 'mysql_enable=”YES”' >> /etc/rc.conf
Создаем для него конфигурационный файл:
# touch /etc/my.cnf
Конфигурацию каждый под свои потребности может сделать, описаний настроек в интернете много. Я предлагаю свой универсальный вариант:
[client] port = 3306 socket = /tmp/mysql.sock [mysqld] port = 3306 bind-address = 127.0.0.1 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M thread_concurrency = 8 log-bin=mysql-bin log=/var/log/mysql.log binlog_format=mixed server-id = 1 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout
В моем варианте сервер жестко привязан к локальному интерфейсу и удаленно с ним работать нельзя. Если вам нужны удаленные подключения, то в параметре bind-address добавьте внешний адрес сервера.
Создадим файл логов:
touch /var/log/mysql.log chown mysql:mysql /var/log/mysql.log
Запускаем Mysql:
# /usr/local/etc/rc.d/mysql-server start
Проверяем, все ли в порядке:
# sockstat | grep mysql mysql mysqld 46460 13 tcp4 127.0.0.1:3306 *:* mysql mysqld 46460 15 stream /tmp/mysql.sock
Демон запущен и слушает локальный интерфейс.
Теперь запустим скрипт для настройки безопасности:
# /usr/local/bin/mysql_secure_installation
Задаем пароль для root и далее на все вопросы отвечаем утвердительно:
На этом установка и настройка mysql закончена. Идем дальше.
Установка и настройка PHP-FPM на Freebsd
Начиная с версии php 5.3 php-fpm идет как модуль, поэтому просто начинаем установку php и указываем в опциях fpm:
# cd /usr/ports/lang/php5 # make config-recursive# make install clean
Ставим теперь дополнения php-extentions:
# cd /usr/ports/lang/php5-extensions # make config-recursive
Дополнений много, все ставить не обязательно, можно будет остальное доставить потом в случае необходимости. Я обычно выбираю наиболее популярные и необходимые:
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
# make install clean
Добавляем php-fpm в автозагрузку:
# echo 'php_fpm_enable=”YES”' >> /etc/rc.conf
Редактируем файл с настройками, приводим его к следующему виду:
# mcedit /usr/local/etc/php-fpm.conf [global] pid = run/php-fpm.pid [www] user = www group = www # работа через unix сокет, а не tcp, дает небольшой прирост производительности listen = /tmp/php-fpm.sock # права доступа к сокету listen.owner = www listen.group = www listen.mode = 0660 # как будут создаваться новые рабочие процессы pm = dynamic # максимальное оличество рабочих процессов pm.max_children = 10 # число запущенных процессов при старте сервера pm.start_servers = 2 # минимальное и максимальное количество процессов в простое pm.min_spare_servers = 1 pm.max_spare_servers = 3
Проверяем синтаксис настроек:
# php-fpm -t NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Стартуем php-fpm:
# /usr/local/etc/rc.d/php-fpm start
Проверяем запустился ли:
# sockstat | grep php-fpm www php-fpm 504 0 stream /tmp/php-fpm.sock www php-fpm 503 0 stream /tmp/php-fpm.sock root php-fpm 502 4 stream -> ?? root php-fpm 502 6 stream -> ?? root php-fpm 502 7 stream /tmp/php-fpm.sock
Все в порядке. Идем дальше.
Установка и настройка nginx на Freebsd
Устанавливаем nginx на наш Freebsd сервер:
# cd /usr/ports/www/nginx # make config-recursive
Выбираем настройки по-умолчанию.
# make install clean
Добавляем nginx в автозагрузку:
# echo 'nginx_enable=”YES”' >> /etc/rc.conf
Редактируем файл настроек. Я приведу пример с двумя виртуальными серверами, на одном из которых будут настройки для wordpress, другой будет для phpmyadmin, я люблю его вешать на отдельный поддомен.
# mcedit /usr/local/etc/nginx/nginx.conf user www; worker_processes 1; 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; log_format main '$remote_addr – $remote_user [$time_local] ' '”$request” $status $bytes_sent ' '”$http_referer” “$http_user_agent” ' '”$gzip_ratio”'; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; server_tokens off; fastcgi_intercept_errors on; client_max_body_size 50m; server { listen 80; server_name www.site1.ru; rewrite ^ http://site1.ru$request_uri? permanent; } # wordpress server { listen 80; server_name site1.ru; root /web/sites/site1.ru/www/; index index.php index.html index.htm; access_log /web/sites/site1.ru/log/access.log main; error_log /web/sites/site1.ru/log/error.log; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico)$ { access_log off; expires max; } location ~ .php$ { fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/site1.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/site1.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/site1.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location ~ /.ht { deny all; } } # phpmyadmin server { listen 80; server_name pma.site1.ru; root /web/sites/pma.site1.ru/www/; index index.php index.html index.htm; access_log /web/sites/pma.site1.ru/log/access.log main; error_log /web/sites/pma.site1.ru/log/error.log; location ~ .php$ { fastcgi_pass unix:/tmp/php-fpm.sock; fastcgi_index index.php; fastcgi_param DOCUMENT_ROOT /web/sites/pma.site1.ru/www/; fastcgi_param SCRIPT_FILENAME /web/sites/pma.site1.ru/www$fastcgi_script_name; fastcgi_param PATH_TRANSLATED /web/sites/pma.site1.ru/www$fastcgi_script_name; include fastcgi_params; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_intercept_errors on; fastcgi_ignore_client_abort off; fastcgi_connect_timeout 60; fastcgi_send_timeout 180; fastcgi_read_timeout 180; fastcgi_buffer_size 128k; fastcgi_buffers 4 256k; fastcgi_busy_buffers_size 256k; fastcgi_temp_file_write_size 256k; } } }
Создаем необходимые каталоги:
# mkdir /web && mkdir /web/sites && mkdir /web/sites/site1.ru && mkdir /web/sites/site1.ru/www && mkdir /web/sites/site1.ru/log && mkdir /web/sites/pma.site1.ru && mkdir /web/sites/pma.site1.ru/www && mkdir /web/sites/pma.site1.ru/log # chown -R www:www /web
Проверяем конфигурацию:
# rehash # nginx –t nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: [emerg] mkdir() “/var/tmp/nginx/client_body_temp” failed (2: No such file or directory) nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
Почему-то nginx не смог создать папку во временном каталоге. Поможем ему сами:
# mkdir /var/tmp/nginx # 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
Все в порядке. Наш web сервер на Freebsd готов. Запускаем nginx и проверяем, нормально ли запустился:
# /usr/local/etc/rc.d/nginx start # sockstat | grep nginx www nginx 3488 10 tcp4 *:80 *:* www nginx 3488 11 stream -> ?? root nginx 3487 3 stream -> ?? root nginx 3487 10 tcp4 *:80 *:* root nginx 3487 11 stream -> ??
Все в порядке, сервер запущен и слушает 80-й порт. Теперь проверим работу web сервера с помощью тестовой странички. Создаем ее:
# touch /web/sites/site1.ru/www/index.php # mcedit /web/sites/site1.ru/www/index.php
Переходим на сайт по адресу http://site1.ru Не забудьте настроить DNS для доступа к установленному серверу, либо отредактируйте в windows файл hosts, добавив туда строку:
192.168.1.21 site1.ru
где 192.168.1.21 адрес web сервера Freebsd 10.
Вы должны увидеть картинку:
Если видите ее у себя, поздравляю, вы все настроили правильно и web сервер полностью готов к работе. Остался только маленький штрих. Для удобства управления mysql установим phpmyadmin.
Установка phpmyadmin на web сервер Freebsd
# cd /usr/ports/databases/phpmyadmin # make install clean
Перемещаем файлы из установочной директории по-умолчанию в наш поддомен pma.site1.ru:
# mv /usr/local/www/phpMyAdmin/* /web/sites/pma.site1.ru/www # mv /usr/local/www/phpMyAdmin/.* /web/sites/pma.site1.ru/www
Меняем владельца:
# chown -R www:www /web/sites/pma.site1.ru/www
Настраиваем DNS записи на pma.site1.ru или просто добавляем в винде в файл hosts строку
192.168.1.21 pma.site1.ru
И заходим по адресу http://pma.site1.ru
У вас должно открыться окно приветствия phpmyadmin. Вводим сюда пользователя и пароль root, которые мы задали в самом начале настройки и попадаем в панель управления базами.
На этом настройка web сервера на базе Freebsd 10.1 и связки nginx + php-fpm закончена.
Помогла статья? Есть возможность отблагодарить автора
Дополнительные материалы по Freebsd
Рекомендую полезные материалы по Freebsd: |
Описание установки Freebsd 11 на одиночный диск, либо на софтовый raid1, сделанный средствами zfs, которые поддерживает стандартный установщик.Базовая настройка Freebsd, которую можно выполнить после установки сервера общего назначения. Представлены некоторые рекомендации по повышению удобства пользования и безопасности.Описание и нюансы обновления системы Freebsd с помощью утилиты freebsd-update. Показано пошагово на конкретном примере обновления.Настройка Freebsd шлюза для обеспечения выхода в интернет. Используется ipfw и ядерный нат, dnsmasq в качестве dhcp и dns сервера. Мониторинг сетевой активности с помощью iftop.Настройка максимально быстрого web сервера на базе Freebsd и nginx + php-fpm. Существенный прирост производительности по сравнению с классическим apache. |
Источник: https://serveradmin.ru/freebsd-nastroyka-php-fpm-i-nginx/
Установка и настройка NGINX + php-fpm в Freebsd
Устанавливать и настраивать NGINX будем в ОС FreeBSD 10.3
Приступаем к установке NGINX
root@linux-in:/usr/ports/www/nginx # whereis nginx nginx: /usr/ports/www/nginx root@linux-in:~ # cd /usr/ports/www/ngin
Выполняем конфигурирование nginx в Freebsd 10.3:
root@linux-in:~ # make config
или
root@linux-in:~ # 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
Затем производим установку устанавливаем:
root@linux-in:~ # make install clean
Подготавливаем конфигурационный nginx.conf файл WEB-сервера nginx
Приводим его к такому виду:
root@linux-in:~ # cat /usr/local/etc/nginx/nginx.conf | grep -v ^#user www; worker_processes 1; 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; # log options log_format main ‘$remote_addr – $remote_user [$time_local] ‘ ‘”$request” $status $bytes_sent ‘ ‘”$http_referer” “$http_user_agent” ‘ ‘”$gzip_ratio”‘; # 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 location ~ .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; } } }
Проверяем синтаксис конфигурационного файла nginx.conf:
root@linux-in:~# 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
Запускаем наш web-сервер:
root@linux-in:~# 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 можно установить во время конфигурирования РНР.
Пример установки для старых версий PHP, возьмем – 5.2
Переходим в порты:
root@linux-in:~# cd /usr/ports/lang
Скачиваем архив php и разархивируем его:
root@linux-in:~# 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% | tar -zxf php-5.2.12-fpm-0.6.tar.gz
Теперь выполняем установку PHP 5.2:
root@linux-in:~# cd php5-fpm make install clean
Продолжаем нашу настройку php 5.3.3
Производим конфигирование:
root@linux-in:~# cd /usr/ports/lang/php5 root@linux-in:~# make config
Нам нужны следующие опции:
Изменяем файл конфигурации php-fpm:
root@linux-in:~# cat /usr/local/etc/php-fpm.conf | grep -v ^; | less [global] pid = run/php-fpm.pid error_log = /var/log/php-fpm-error.log [www] user = www group = www listen = 127.0.0.1:9000 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
Создадим файлы лога NGINX и проверим:
root@linux-in:~# touch /var/log/php-fpm-error.log root@linux-in:~# touch /var/log/php-fpm-slow.log root@linux-in:~# php-fpm -t [23-Sep-2012 19:14:08] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful
Запускаем php-fpm на нашем сервере:
root@linux-in:~# /usr/local/etc/rc.d/php-fpm onestart Starting php_fpm. root@linux-in:~# service php-fpm onestatus php_fpm is running as pid 52318.
Создаем файл info.php с содержимым:
После создания файл info.php, мы добавим его в каталог, как сказано в конфигурации NGINX
и проведем проверку нашего NGINX с php-fpm на FreeBSD 10.3:
Источник: http://linux-in.com/ustanovka-i-nastroika-nginx-php-fpm-freebsd/
Настройка сервера FreeBSD + Nginx + PHP 5 + PHP-FPM + MySQL 5
В Магвае для хостинга сайтов клиентов и собственных проектов используем европейский dedicated хостинг. Покупка, установка, настройка и поддержание работы сервера — задачи на самом деле простые, если не хостить тяжелые проекты и не отбиваться от досов.
После покупки, саппорт хостинга в автоматическом режиме устанавливает OS, поднимает SSH и дает реквизиты для доступа. После этого настройку можно производить самостоятельно. Проще всего заказать и поставить какую-нибудь контрольную панель, которая сама установит и настроит все сервисы.
Но можно все сделать вручную и иметь полный контроль над всеми тонкостями настройки сервисов.
Будем настраивать FreeBSD 8.2, nginx 0.8, PHP 5.3.5, Mysql 5.5.
Итак, рассматриваем ситуацию, что у вас есть IP и пароль root от выделенного сервера, на который мы все будем ставить. Первым делом подключаемся к нему по SSH.
Это стандартный протокол связи с удаленным сервером, через который можно выполнять все операции администрирования. Для подключения нужна программа, которая этот SSH поддерживает.
В Linux и MacOS — это консоль, в Windows — это Putty.
Для подключения в Linux и MacOS открываем терминал и пишем:
При запросе пароля вводим его. В Windows запускаем Putty.exe в поле Host Name пишем IP сервера, жмем Open и вводим логин и пароль когда спросит.
Если подключились, то можно продолжать. Если нет, то либо разбираемся с подключением к интернету, либо просим саппорт хостинга поднять сервер в многопользовательском режиме, чтобы он был доступен для подключения по SSH.
После подключения первым делом ставим коллекцию портов. Порты — это большая коллекция программ (пакетов), которые могут быть вами скомпилированы и установлены.
Коллекция портов — это их список, который содержит информацию о версии пакета. Даже если коллекция портов уже была установлена при установке OS, все равно будет не лишним ее обновить.
Для установки/обновления портов выполняем команду:
Процесс установки займет много времени и съест несколько сотен мегабайт траффика. Даже на быстрых соединениях скачивание будет медленным, потому что раздающие сервера не очень быстрые, да и файлов много.
После установки портов мы можем начинать ставить программы. Первым делом удобно получить файловый менеджер с графической оболочкой, чтобы просмотривать файловую систему, котпировать и редактировать файлы. Я использую Midnight Commander.
Это популярный консольный файловый менеджер. Он при установке потянет за собой кучу пакетов. Все будет автоматически скачано и установлено. Вам нужно только быть рядом и жать OK во всплывающих окнах. Все опции можно оставить по-умолчанию.
Для установки mc переходим в каталог пакета:
Компилируем mc:
Устанавливаем mc:
После установки вводим команду:
Она обновит переменные окружения и вы сможете сразу запустить файловый менеджер не указывая полный путь к нему, а лишь название программы.
Теперь можно приступить к установке сервера nginx. Попробуем найт нужный пакет в коллекции портов. прееходим:
Ищем nginx:
В результатх находим нужный пакет (в нашем случае nginx-0.8.54) и переходим в его каталог:
Компилируем его. Параметры выбираем под свои нужды. Можно просто оставить все по-умолчанию:
Устанавливаем:
Настраиваем nginx. Запускаем mc:
Переходим в каталог /usr/local/etc/nginx и настраиваем nginx: правим файл nginx.conf. Настройки приводить не буду — все очень специфично. Приведу лишь блок server:
В приведенном примере мы перенаправляем все запросы, которые не ведут на существующие файлы на скрипт index.php. А он в свою очередь обрабатывается PHP, запущенном в режиме CGI на нашем сервере на порту 9000.
Теперь для того, чтобы сервер nginx заработал во FreeBSD, его нужно разрешить в файле /etc/rc.conf. Открываем его в mc и дописываем строчку:
И запускаем nginx командой:
В дальнейшем, для управления работой серверов можно использовать команду service. Самые распространенные собыимя: start, restart, stop, reload.
После запуска nginx при заходе через браузер на IP сервера мы увидим «Welcome to nginx» — это хорошие новости. Сервер работает, но у него нет интерпритатора PHP для обработки запросов.
Ставим PHP. Переход в /usr/ports:
Ищем PHP:
Находим нужный порт и преходим в него:
Компилируем. В настройках выбираем обе версии CLI и CGI, а также FPM — он позволит нам запускать PHP в CGI режиме без лишних программ.
После сборки устанавливаем:
Затем идем в директорию расширений PHP и устанавливаем их. П списке ставим крестики напротив нужных:
Сразу рекомендую поставить memcached:
И для того, чтобы он работал с php, ставим расшиерние:
Также сразу поставим APC — систему кэширования PHP скриптов:
Теперь в /etc/rc.conf нужно дописать 2 строчки. Он разрешат запуск PHP и Memcached:
И запускаем их поочереди:
Проверить работоспособность PHP можно, разместив в каталоге nginx сервера файл index.php с любым проверочным кодом. Если вы не правили конфиг nginx.conf, то этот каталог имеет путь /usr/local/www/nginx.
Ну и напоследок можно поставить MySQL сервер.
В /etc/rc.conf разрешаем mysql:
Запускаем:
На что следует обратить внимание. После установки у вас будет работающий веб-сервер, настроенный в основном по-умолчанию. Первым делом на сервере нужно включить файрвол и закрыть ненужные порты. Нужно активировать php.ini файл . Для этого в каталоге /usr/local/etc находим файл php.
ini-production и переименовываем его просто в php.ini. Сразу можно произвести необходимые настройки — задать лимиты памяти, контроль ошибок, прописать нужную timezone, настроить APC. Также можно настроить пользователя и группу под которыми работает PHP. В файле /usr/local/etc/php-fpm.conf есть соответствующие строчки.
Каталог баз данных mysql находится в /var/db/mysql.
Пользоваться всем этим достаточно просто. Мониторить нагрузку на сервер можно командами top и ps, перезапускать сервисы — командой service имя_сервиса restart. Желательно настроить ротацию логов для nginx, чтобы они каждый день очищались и не накапливалось много мусора.
Источник: http://magwai.ru/blog/831/
Установка и настройка Nginx+PHP-FPM на FreeBSD | Записки системного администратора
1.Установка и настройка Nginx
cd /usr/ports/www/nginx
make install clean
cd /usr/local/etc/nginx/
cp nginx.conf nginx.conf~
nano nginx.conf (см.ниже)
nginx –t
mkdir -p /var/tmp/nginx/client_body_temp
mkdir -p /var/log/nginx
nano conf.d/joomla.to.conf (см.ниже)
nano conf.d/wordpress.to.conf (см.ниже)
htpasswd -c .htpasswd tom
htpasswd .htpasswd bob
Создаем символьную ссылку phpmyadmin для phpMyAdmin’а
ln -s /usr/local/www/phpMyAdmin /usr/local/www/apache22/data/phpmyadmin
/usr/local/www/apache22/data/ — это DocumentRoot для сервера по умолчанию
nginx –t
nano /etc/rc.conf
nginx_enable=»YES»
/usr/local/etc/rc.d/nginx start
2.Установка и настройка PHP—FPM
Начиная с версии php-5.3.3 php-fpm идет в составе php ,как опция при сборке из портов php
Мои опции сборки PHP
cat /var/db/ports/lang_php5/options | grep -v UNSET
_OPTIONS_READ=php5-5.4.17
OPTIONS_FILE_SET+=CLI
OPTIONS_FILE_SET+=CGI
OPTIONS_FILE_SET+=FPM
OPTIONS_FILE_SET+=APACHE
OPTIONS_FILE_SET+=LINKTHR
для версий младше 5.3.3. инструкцию смотрим на сайте
http://php-fpm.org/download/
cp /usr/local/etc/php-fpm.conf /usr/local/etc/php-fpm.conf~
nano /usr/local/etc/php-fpm.conf
Создаем необходимые файлы
/var/log/{php-fpm.log,php-fpm.slow.log,php-fpm.www.log}
Проверка синтаксиса
php-fpm -t
nano /etc/rc.conf
php_fpm_enable=»YES»
/usr/local/etc/rc.d/php-fpm start
cat /usr/local/etc/nginx/nginx.conf
user www www;
worker_processes 1;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use kqueue;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main ‘$remote_addr — $remote_user [$time_local] «$request» ‘
‘$status $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘;
access_log /var/log/nginx/access.log main;
client_header_timeout 10;
client_body_timeout 10;
send_timeout 10;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 4 2k;
request_pool_size 4k;
sendfile on;
#tcp_nopush on;
tcp_nodelay on;
server_tokens off;
gzip on;
gzip_static on;
gzip_comp_level 5;
gzip_min_length 1024;
gzip_buffers 4 8k;
gzip_disable msie6;
gzip_types text/plain application/json text/xml text/css text/comma-separated-values text/javascript application/x-javascript application/atom+xml;
keepalive_timeout 5 5;
limit_conn_zone $binary_remote_addr zone=addr:10m;
output_buffers 1 32k;
client_body_buffer_size 8K;
postpone_output 1460;
index index.html;
client_max_body_size 80m;
index index.html index.htm index.php;
include /usr/local/etc/nginx/conf.d/*.conf;
server {
listen 192.168.1.42:80 default_server;
server_name _;
#charset koi8-r;
location / {
root /usr/local/www/apache22/data;
try_files $uri $uri/ /index.php;
}
location ~ .php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-fpm.sock; #Если nginx и php-fpm запущены на одном и том # же сервере,тогда подключаемся через сокет вместо использования портов
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Здесь у меня почему-то не завелось через переменную $document_root, пришлось #принудительно указывать полный путь
fastcgi_param SCRIPT_FILENAME /usr/local/www/apache22/data$fastcgi_script_name;
include fastcgi_params;
}
# phpMyAdmin
location ~ ^/phpmyadmin/(.*.php)$ {
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /usr/local/www/phpMyAdmin/$1;
fastcgi_param DOCUMENT_ROOT /usr/local/www/phpMyAdmin;
}
#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;
}
location ~ /.ht {
deny all;
}
location /server-status {
stub_status on;
access_log on;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
}
}
}
cat /usr/local/etc/nginx/conf.d/joomla.to.conf
server {
listen 192.168.1.42:80;
server_name joomla.to www.joomla.to;
location /server-status {
stub_status on;
access_log on;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
}
location / {
root /usr/local/www/joomla.to;
try_files $uri $uri/ /index.php;
satisfy any;
allow 192.168.1.0/24;
allow 127.0.0.1/32;
deny all;
auth_basic «Restricted»;
auth_basic_user_file /usr/local/etc/nginx/.htpasswd;
}
location ~ .php$ {
root /usr/local/www/joomla.to;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
}
cat /usr/local/etc/nginx/conf.d/wordpress.to.conf
server {
listen 80;
server_name wordpress.to www.wordpress.to;
location /server-status {
stub_status on;
access_log on;
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
}
location / {
root /usr/local/www/wordpress.to;
try_files $uri $uri/ /index.php;
satisfy any;
allow 192.168.1.0/24;
allow 127.0.0.1/32;
deny all;
auth_basic «Restricted»;
auth_basic_user_file /usr/local/etc/nginx/.htpasswd;
}
location ~ .php$ {
root /usr/local/www/wordpress.to;
# fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/tmp/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
}
cat /usr/local/etc/php-fpm.conf | grep -v ;
[global]
pid = run/php-fpm.pid
error_log = /var/log/php-fpm.log
log_level = notice
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 5
daemonize = yes
events.mechanism = kqueue
[www]
user = www
group = www
listen.backlog = -1
listen.owner = www
listen.group = www
listen.mode = 0666
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm.slow.log
request_slowlog_timeout = 10
rlimit_files = 1024
rlimit_core = 0
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
Источники:
Источник: https://kamaok.org.ua/?p=130
Linux/BSD Проще не бывает!
Давно у меня в голове засела идея избавиться от apache2 на своих серверах. Зачем нужен этот древний тяжеленный мамонт? Ради модуля php? Ну так все хостинги давно уже обкатали режим php-fpm -это когда специфически собранный PHP работает сам по себе как сервис для компиляции php файликов.
Стабильность и функциональность данного варианта работы PHP отличная! Остается статика, всякие картинки, стили, java-скрипты …. тут среди попсовых решений Nginx впереди планеты всей! Таким образом получаем простенькую систему из PHP-FPM + Nginx способную заменить Apache2 + mod_php + PHP.
К тому же для большей безопасности и гибкости в настройке PHP-FPM поддерживает pools — это значит что PHP под каждый отдельный web-ресурс можно сконфигурить отдельно, к примеру сайту #1 дать 64MB RAM, а сайту #5 — 2048MB и тд, а любые превышения лимитов одним пулом не будут влиять на работу других.
Для большей безопасности каждый пул можно разместить в его личном chroot-окружении, что на уровне FS изолирует все пулы друг от друга. Сладко??? Тогда в бой!
Установка PHP с флагом FPM:
Устанавливаем порт /usr/ports/lang/php5 с опцией PHP-FPM.
При необходимости устанавливаем /usr/ports/lang/php5-extensions
Установка nginx:
Также из портов устанавливаем nginx, у меня он собран с такими опциями:
HTTP=on: Enable HTTP module
HTTP_ADDITION=on: Enable http_addition module
HTTP_CACHE=on: Enable http_cache module
HTTP_GZIP_STATIC=on: Enable http_gzip_static module
HTTP_GUNZIP_FILTER=on: Enable http_gunzip_filter module
HTTP_IMAGE_FILTER=on: Enable http_image_filter module
HTTP_PERL=on: Enable http_perl module
HTTP_REALIP=on: Enable http_realip module
HTTP_REWRITE=on: Enable http_rewrite module
HTTP_STATUS=on: Enable http_stub_status module
WWW=on: Enable html sample files
Не забываем про автозагрузку сервисов:
В /etc/rc.conf добавляем такие строчки для автостарта сервисов nginx и php-fpm
# #
nginx_enable=”YES”
# #
php_fpm_enable=”YES”
Создание пользователя и окружения для chroot:
Создаем юзера, который у нас будет использоваться для виртуального web-хостинга. У меня это wwwuser. В его домешнем каталоге создаем необходимые директории для chroot php-fpm:
root@srv1:~# cd /home/wwwuser
root@srv1:/home/wwwuser# mkdir wwwchroot
root@srv1:/home/wwwuser# mkdir wwwchroot/{etc,htdocs,logs,tmp,usr}
root@srv1:/home/wwwuser# mkdir wwwchroot/usr/local
root@srv1:/home/wwwuser#
Создаем симлинки на некоторые конфиги и сокет mysql-сервера:
root@srv1:/home/wwwuser# cd wwwchroot/
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/hosts etc/hosts
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/host.conf etc/host.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/resolv.
conf etc/resolv.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/nsswitch.conf etc/nsswitch.conf
root@srv1:/home/wwwuser/wwwchroot# ln -s /etc/localtime etc/localtime
root@srv1:/home/wwwuser/wwwchroot# ln -s /tmp/mysql.sock tmp/mysql.
sock
Создаем симлинки на библиотеки:
root@srv1:/home/wwwuser/wwwchroot# ln -s /lib lib
root@srv1:/home/wwwuser/wwwchroot# ln -s /usr/local/lib usr/local/lib
root@srv1:/home/wwwuser/wwwchroot#
Настройка php-fpm:
Для удобства я «розбил» конфигурацию на основную часть [global] в конфиге /usr/local/etc/php-fpm.conf и настройки каждого веб-ресурса [pool] отдельно в директории /usr/local/etc/fpm.d/
Содержимое основного конфига:
include=etc/fpm.d/*.conf
[global]
pid = run/php-fpm.pid
events.mechanism = kqueue
Конфиги веб ресурсов нужно создавать в директории /usr/local/etc/fpm.d/. Их может быть много, поэтому удобно каждому юзеру создавать отдельный файлик. Вот пример содержимого одного из таких конфигов — /usr/local/etc/fpm.d/wwwuser_pool.conf:
[wwwuser]
prefix = /usr/home/$pool user = wwwuser group = wwwuser
listen = wwwchroot/tmp/php5-fpm.sock
listen.owner = www listen.group = www listen.mode = 0600 pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 50
slowlog = logs/$pool.log.slow
request_slowlog_timeout = 5
request_terminate_timeout = 25
chroot = $prefix/wwwchroot
chdir = /htdocs
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i -f [email protected]
php_flag[display_errors] = off
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 32M
После этого у вас должен нормально запуститься сервис php-fpm. Пробуем:
root@srv1:~# service php-fpm start Starting php_fpm.
root@srv1:~#
Отлично! Поехали дальше! Настройка nginx:
Тут я не очень разобрался, но скажем так, добился реально рабочего результата. Поэтому с удовольствием прочитаю замечания по настройке nginx в комментах. В стандартный конфиг /usr/local/etc/nginx/nginx.conf добавил секцию server для CMS Drupal версии 7:
server {
listen 80; server_name mydomain.kiev.ua www.mydomain.kiev.ua;
gzip on;
gzip_static on; gzip_vary on;
gzip_http_version 1.1;
gzip_min_length 700;
gzip_comp_level 6;
gzip_disable “msie6”;
access_log /usr/home/wwwuser/logs/drupal-access.log;
error_log /usr/home/wwwuser/logs/drupal-error.log;
root /usr/home/wwwuser/wwwchroot/htdocs/drupal7;
location = /favicon.ico {
log_not_found off; access_log off;
}
location = /robots.txt {
allow all; log_not_found off; access_log off;
}
# Very rarely should these ever be accessed outside of your lan
location ~* .(txt|log)$ {
allow 127.0.0.0/8; deny all;
}
location ~ ..*/.*.php$ {
return 403;
}
# No no for private
location ~ ^/sites/.*/private/ {
return 403;
}
# Block access to “hidden” files and directories whose names begin with a
# period. This includes directories used by version control systems such
# as Subversion or Git to store control files.
location ~ (^|/). {
return 403;
}
location / {
# This is cool because no php is touched for static content
try_files $uri @rewrite;
}
location @rewrite {
# You have 2 options here
# For D7 and above:
# Clean URLs are handled in drupal_environment_initialize().
rewrite ^ /index.php;
# For Drupal 6 and bwlow:
# Some modules enforce no slash (/) at the end of the URL
# Else this rewrite block wouldn't be needed (GlobalRedirect)
#rewrite ^/(.*)$ /index.php?q=$1;
}
location ~ .php$ {
fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_intercept_errors on;
fastcgi_param SCRIPT_FILENAME /htdocs/drupal7$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /htdocs/drupal7;
fastcgi_pass unix:/usr/home/wwwuser/wwwchroot/tmp/php5-fpm.sock; include fastcgi_params;
}
# This is for D7 and D8
location ~ ^/sites/.*/files/styles/ {
try_files $uri @rewrite;
}
location ~* .(js|css|png|jpg|jpeg|gif|ico)$ {
expires max; log_not_found off;
}
location ~ /. {
deny all;
}
}
Как видно из конфига, drupal у меня установлен в отдельной директории в htdocs, вот полный путь — /usr/home/wwwuser/wwwchroot/htdocs/drupal
После сохранения конфига можно запустить nginx:
root@srv1:~# service nginx start 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.
root@srv1:~#
Ну и после этого пробуем в браузере открыть наш сайт: http://mydomain.kiev.ua Я розпаковал в директорию drupal сам CMS — поэтому увидел приглашение к установке … все заработало с «пол-пинка».
Пробовал аналогичный образом настраивать wordpress и phpBB — отлично работает, правда настройки в nginx.
conf под разные движки разные, но найти их не составляет труда, зачастую на официальных сайтах разработчиков web-приложений есть готовые примеры конфига nginx.
Хай щастить!
Источник: http://diff.org.ua/archives/2106
Настройка Nginx+PHP-FPM на FreeBSD
Пропустить и перейти к содержимому
В дополнение к предыдущей статье решил описать как настроить это дело без Apache.
Пересобираем php5 с поддержкой php-fpm
deathstar# cd /usr/ports/lang/php5 deathstar# make config
deathstar# make deinstall clean && make install clean
Настраиваем PHP-FPM
deathstar# cp /usr/local/etc/ deathstar# cp php-fpm.conf.default php-fpm.conf
deathstar# ee php-fpm.conf
И приводим примерно к такому виду
;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ;
;;;;;;;;;;;;;;;;;;;;;
; All relative paths in this configuration file are relative to PHP's install ; prefix (/usr/local). This prefix can be dynamicaly changed by using the
; '-p' argument from the command line.
; Include one or more files. If glob(3) exists, it is used to include a bunch of ; files from a glob(3) pattern. This directive can be used everywhere in the ; file. ; Relative path can also be used. They will be prefixed by: ; – the global prefix if it's been set (-p arguement) ; – /usr/local otherwise
;include=etc/fpm.d/*.conf
;;;;;;;;;;;;;;;;;; ; Global Options ;
;;;;;;;;;;;;;;;;;;
[global] ; Pid file ; Note: the default prefix is /var ; Default Value: none
pid = run/php-fpm.pid
; Error log file ; Note: the default prefix is /var ; Default Value: log/php-fpm.log
;error_log = log/php-fpm.log
; Log level ; Possible Values: alert, error, warning, notice, debug ; Default Value: notice
;log_level = notice
; If this number of child processes exit with SIGSEGV or SIGBUS within the time ; interval set by emergency_restart_interval then FPM will restart. A value ; of '0' means 'Off'. ; Default Value: 0
;emergency_restart_threshold = 0
; Interval of time used by emergency_restart_interval to determine when ; a graceful restart will be initiated. This can be useful to work around ; accidental corruptions in an accelerator's shared memory. ; Available Units: s(econds), m(inutes), h(ours), or d(ays) ; Default Unit: seconds ; Default Value: 0
;emergency_restart_interval = 0
; Time limit for child processes to wait for a reaction on signals from master. ; Available units: s(econds), m(inutes), h(ours), or d(ays) ; Default Unit: seconds ; Default Value: 0
;process_control_timeout = 0
; Send FPM to background. Set to 'no' to keep FPM in foreground for debugging. ; Default Value: yes
;daemonize = yes
;;;;;;;;;;;;;;;;;;;; ; Pool Definitions ;
;;;;;;;;;;;;;;;;;;;;
; Multiple pools of child processes may be started with different listening ; ports and different management options. The name of the pool will be ; used in logs and stats. There is no limitation on the number of pools which
; FPM can handle. Your system will tell you anyway 🙂
; Start a new pool named 'www'. ; the variable $pool can we used in any directive and will be replaced by the ; pool name ('www' here)
[www]
; Per pool prefix ; It only applies on the following directives: ; – 'slowlog' ; – 'listen' (unixsocket) ; – 'chroot' ; – 'chdir' ; – 'php_values' ; – 'php_admin_values' ; When not set, the global prefix (or /usr/local) applies instead. ; Note: This directive can also be relative to the global prefix. ; Default Value: none
;prefix = /path/to/pools/$pool
; The address on which to accept FastCGI requests. ; Valid syntaxes are: ; 'ip.add.re.ss:port' – to listen on a TCP socket to a specific address on ; a specific port; ; 'port' – to listen on a TCP socket to all addresses on a ; specific port; ; '/path/to/unix/socket' – to listen on a unix socket. ; Note: This value is mandatory.
listen = 127.0.0.1:9000
; Set listen(2) backlog. A value of '-1' means unlimited. ; Default Value: 128 (-1 on FreeBSD and OpenBSD)
;listen.backlog = -1
; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original ; PHP FCGI (5.2.2+). Makes sense only with a tcp listening socket. Each address ; must be separated by a comma. If this value is left blank, connections will be ; accepted from any ip address. ; Default Value: any
;listen.allowed_clients = 127.0.0.1
; Set permissions for unix socket, if one is used. In Linux, read/write ; permissions must be set in order to allow connections from a web server. Many ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 ;listen.owner = www ;listen.group = www
;listen.mode = 0666
; Unix user/group of processes ; Note: The user is mandatory. If the group is not set, the default user's group ; will be used. user = www
group = www
Источник: https://deathstar.name/nastrojka-nginxphp-fpm-na-freebsd/
Установка nginx + php-fpm + memcache + eaccelerator на FreeBSD
Зачем всё это? — спросите вы. Да просто захотелось поделиться с общественностью некоторым опытом, полученным в процессе оптимизации vds под нужды одного общеизвестного блого-социального движка, который на обычном хостинге чувствует себя, мягко скажем, некомфортно.
Началось всё с того, что я ушёл от firstvds, где уже ничто не спасёт от тормозов. Ушел на ганди.нет, взял одну шару (1 share), которую дали на месяц бесплатно. Кстати, акция эта (This summer, your server is free!) вроде еще не закончилась.
😉 И начал на этой шаре проводить зверские эксперименты с установкой разного ПО. Тестировал результаты с помощью siege.
В итоге конфигурация из сабжа оказалась самая быстрая. Опытом её установки и настройки я и хотел бы с вами поделиться.
Перво-наперво обновляем дерево портов, если давно этого не делали. А если никогда не делали, то без этого дальше никуда:
NGINX
Устанавливаем последнюю стабильную версию nginx из портов: Добавляем строку 'nginx_enable=«YES»' в файл '/etc/rc.conf'.
Основные настройки nginx по-умолчанию, чтобы знать где искать:
- Конфиг: /usr/local/etc/nginx/nginx.conf
- Порты http / https: 80 / 443
- Логи ошибок: /var/log/nginx-error.log
- Логи доступа: /var/log/nginx-access.log
- Коневая папка: /usr/local/www/nginx/
PHP-FPM
Сначала ставим сам php: Поддержка PHP в FreeBSD построена по модульному принципу, поэтому базовая установка обладает ограниченной функциональностью. Дополнительные расширения могут быть легко добавлены при помощи порта php5-extensions. Установим расширения, которые нам необходимы (например, mbstring, gd, mysql…
):
Далее ставим патч php-fpm. В портах freebsd этот патч отсутствует, но это не беда. Предлагаю всё-таки поставить его через порт, а не собрать из исходников. Скачиваем порт для FreeBSD с сайта php-fpm.
org и распаковываем в директорию портов по-умолчанию, откуда и устанавливаем:
Добавляем строку 'php_fpm_enable=”YES”' в файл '/etc/rc.conf'.
Дружим NGINX и PHP
Заходим в кофиг нашего http-сервера. По-умолчанию он находится здесь '/usr/local/etc/nginx/nginx.conf'. Стираем всё. Для начала конфиг будет такой с минимумом настроек:
Детальное описание настроек конфигурационного файла можно найти тут и тут, поэтому подробно останавливаться не буду.
Давеча вышла статья на Хабре про настройку nginx — рекомендую к просмотру. Далее редактируем конфигурацию php-fpm. По-дефолту он лежит тут '/usr/local/etc/php-fpm.conf'. Находим в файле строки: И меняем их на:
Тем самым указав пользователя и группу, под которыми будет крутиться php.
Подробное описание этих и других настроек php-fpm есть на официальном сайте на русском языке.
MEMCACHE
Ставим расширение memcache: После чего заходим в файл '/usr/local/etc/php/extensions.ini', где добавляем строчку:
EACCELERATOR
Устанавливаем: Аналогично memcache заходим в файл '/usr/local/etc/php/extensions.ini' и добавляем строчку: Создаем папку, где eAccelerator будет хранить свой кэш, задаем владельца www и устанавливаем права:
РЕЗУЛЬТАТ
Запускаем php и nginx: Пришло время проверить, получилось ли у нас что-нибудь. 🙂 Создаем файл '/usr/local/www/nginx/info.php' c содержимым “”. И смотрим результат в браузере: httр://ваш-домен/info.
рhр — должно быть как-то так:
За рамки данной заметки вышли: установка mysql (ставится так же просто, как и всё остальное из портов) и куча различных настроек, читай тюнинга, всего этого великолепия. Но это огромный материал, который регулярно освещается на Хабре в той или иной мере по частям.
Есть ли смысл собирать тюнинг всей связки в одной статье — пока не знаю. Спасибо за внимание. Мой первый топик здесь за два года присутствия. 🙂
Источник: https://habr.com/post/67152/
FreeBSD установка nginx, mysql, php-fpm, memcache, eaccelerator
Недавно пришлось поднимать веб сервер, и не долго думая решил попробовать, как писал ранее поднять все это дело под nginx. В топку предисловие, погнали.
Сначала обновим дерево портов:
Устанавливаем nginx, можно поставить свежую версию (nginx-devel), а можно последнюю стабильную, что я и сделаю:
# cd /usr/ports/www/nginx |
Зачастую необходимо отметить следующие пункты:
а если нужна поддержка SSL, то и
устанавливаем его:
Добавим его теперь в автозагрузку:
# echo 'nginx_enable=”YES”' >> /etc/rc.conf |
Файл настроек: /usr/local/etc/nginx/nginx.conf Корневая папка сервера: /usr/local/www/nginx/
Настроим его позже, сейчас поставим мускул.
# cd /usr/ports/databases/mysql51-server/ |
Устанавливаем БД:
# /usr/local/bin/mysql_install_db |
Выставляем права на папку с БД:
# chown -R mysql /var/db/mysql/ |
Запускаем мускул:
# /usr/local/etc/rc.d/mysql-server onestart |
Устанавливаем пароль на рута:
# /usr/local/bin/mysqladmin -u root password 'пароль' |
Ставим его в автозагрузку:
# echo 'mysql_enable=”YES”' >> /etc/rc.conf |
Устанавливаем php:
# cd /usr/ports/lang/php52 |
Ставим необходимые нам расширения:
# cd /usr/ports/lang/php52-extensions/ |
Установка PHP-FPM:
# fetch http://ru2.php.net/get/php-5.2.14.tar.gz/from/ru.php.net/mirror# tar -xzf php-5.2.14.tar.gz# fetch http://php-fpm.org/downloads/php-5.2.14-fpm-0.5.14.diff.gz# gzip -cd php-5.2.14-fpm-0.5.14.diff.gz | patch -d php-5.2.14 -p1# ./configure –enable-fastcgi –enable-fpm# cp /tmp/php-5.2.10/sapi/cgi/fpm/php-fpm /usr/local/etc/rc.d/# chmod +x /usr/local/etc/rc.d/php-fpm |
Проверим версию php после установки:
PHP 5.2.14 (cli) (built: Feb 1 2011 22:53:19)Copyright (c) 1997-2010 The PHP GroupZend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies |
Если «built» сегодняшний, то всё ок.
Как всегда, добавляем его в автозагрузку:
# echo 'php_fpm_enable=”YES”' >> /etc/rc.conf |
Добавляем поддержку php в nginx, для этого открываем файл /usr/local/etc/nginx/nginx.conf, чистим его, и добавлем следующие строки:
default_type application/octet-stream;log_format main '$remote_addr – $remote_user [$time_local] ''”$request” $status $bytes_sent ''”$http_referer” “$http_user_agent” 'fastcgi_intercept_errors on;root /usr/local/www/nginx;index index.php index.html index.htm;location ~* .(jpg|jpeg|gif|png|ico|css|zip|js|swf)$ {root /usr/local/www/nginx;error_page 500 502 503 504 /50x.html;root /usr/local/www/nginx-dist;fastcgi_pass 127.0.0.1:9000;fastcgi_param SCRIPT_FILENAME /usr/local/www/nginx$fastcgi_script_name; |
Далее редактируем конфигурацию php-fpm. По-дефолту он лежит тут ‘/usr/local/etc/php-fpm.conf’. Находим в файле строки:
<!–- <value name=”user”>nobody</value> -–><!–- <value name=”group”>nobody</value> -–> |
И меняем их на:
<value name=”user”>www</value><value name=”group”>www</value> |
Тем самым указав пользователя и группу, под которыми будет крутиться php. MEMCACHE
Ставим расширение memcache:
# cd /usr/ports/databases/pecl-memcache |
После чего заходим в файл ‘/usr/local/etc/php/extensions.ini’, где добавляем строчку:
EACCELERATOR
Устанавливаем:
# cd /usr/ports/www/eaccelerator |
Аналогично memcache заходим в файл ‘/usr/local/etc/php/extensions.ini’ и добавляем строчку:
extension=eaccelerator.so |
Создаем папку, где eAccelerator будет хранить свой кэш, задаем владельца www и устанавливаем права:
# mkdir /tmp/eaccelerator# chown www /tmp/eaccelerator# chmod 0700 /tmp/eaccelerator |
Настраиваем eAccelerator:
ee /usr/local/etc/php.ini |
[php]extension="eaccelerator.so"eaccelerator.shm_size="16"; Путь до каталога файлов кешаeaccelerator.cache_dir="/tmp/eaccelerator"; Переключатель модуля (1 – вкл и 0 – выкл)eaccelerator.enable="1"; Переключатель оптимизатора (1 – вкл и 0 – выкл)eaccelerator.optimizer="1"; Добавляет отладочную информацию в лог (1 – вкл и 0 – выкл)eaccelerator.debug="0"eaccelerator.log_file = "/var/log/eaccelerator_log"; Проверять время модификации файлов кеша для перекомпиляции оных (1 – вкл и 0 – выкл)eaccelerator.check_mtime="1"; Фильтр расширений файлов которых надо кешировать. Например, "*.php *.phtml".eaccelerator.filter=""; Размер выделяемой памяти, в байтах. Допустимо вводить в формате 10240, 10K, 1M и т.д. При 0 – безлимитeaccelerator.shm_max="0"eaccelerator.shm_ttl="120"; Период удаления старых данных из памяти, сек (при 0 не удаляет)eaccelerator.shm_prune_period="0"; Использовать для кеша только память. При 0 используется диск и памятьeaccelerator.shm_only="0"; Переключатель компресии (1 – вкл и 0 – выкл)eaccelerator.compress="1"eaccelerator.compress_level="9"# /usr/local/etc/rc.d/php-fpm start# /usr/local/etc/rc.d/nginx start |
Проверим что мы из этого всего получили, создадим файлик /usr/local/www/nginx/test.php со следующим содержимым:
[php]<!–?php phpinfo(); ?–>и пробуем открыть в браузере по адресу:http://IP-Servera/test.php |
Если все прошло успешно то вы увидите описание вашего пхп, модулей и прочего
Источник: https://i-notes.org/freebsd-nginx/