Gentoo: простой web-сервер (nginx + PHP + MySQL)
Я уже рассказывал как организовать простой веб-сервер на базе Apche2, но с недавнего времени и настройка связки nginx+php стала достаточно простой, ввиду того что теперь пакет php-fpm включён в базовый пакет php. И так:
korp # nano /etc/portage/package.use
dev-db/mysql berkdb dev-lang/php berkdb bzip2 bcmath curl exif filter fpm ftp gd mysql mysqli pcre pdo pcre posix session simplexml ssl sqlite sqlite3 threads tokenizer unicode xml xmlrpc vhosts zip zlib -berkdb -gdbm -ncurses -readline -reflection -spl -snmp
Устанавливаем
korp # emerge www-servers/nginx dev-lang/php dev-db/mysql
Далее необходимо сконфигурировать php:
korp # nano /etc/php/fpm-php5.4/php-fpm.conf
В секции [www] необходимо указать что мы будем работать не через локальный порт, а через сокет
;listen = 127.0.0.1:9000 listen = /var/run/php/fcgi-php.sock
Работа через сокет быстрее, чем через локальный порт, т.к. нет накладных расходов TCP.
теперь переходим к настройке nginx:
korp # nano /etc/nginx/nginx.conf
Конфиг необходимо привести к следующему виду:
large_client_header_buffers 4 8k; ... index index.html index.php index.htm; ... server { listen www.example.com:80; ... access_log /var/log/nginx/www.example.com.access_log main; error_log /var/log/nginx/www.example.com.error_log info; root /var/www/localhost/htdocs/; ... location ~ \.php$ { fastcgi_pass unix:/var/run/php/fcgi-php.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } ... }
Немного объясню конфиг:
— large_client_header_buffers увеличим размер принимаемого заголовка, иначе будет ошибка (хотя возможно это лишь косяк в данной версии nginx/1.2.6, где по-умолчанию размер установлен в 2k).
— index указываем какие файлы считать индексными (параметра fastcgi_index в секции location недостаточно для корректной работы).
— добавляем секцию location, где всё оставляем по дефолту, отличие лишь в fastcgi_pass, где мы указываем unix-сокет, который мы настроили в php-fpm
И незабудьте исправить listen www.example.com. Если необходимо поднять несколько виртуальных доменов — у вас должно быть несколько секций server, которые будут описывать каждый из доменов/поддоменов.
Ну и остались последние штрихи:
Создаём директорию где будет жить файл сокета:
korp # mkdir -p /var/run/php
Запускаем php-fpm и добавляем в автозапуск
korp # /etc/init.d/php-fpm start korp # rc-update add php-fpm default
Запускаем nginx и добавляем в автозапуск
korp # /etc/init.d/nginx start korp # rc-update add nginx default
Отключаем логи mysql, дабы они не забивали нам систему
korp # nano /etc/mysql/my.cnf
#log-bin
Конфигурируем mysql, запускаем и добавляем в автозагрузку
korp # mysql_install_db korp # /etc/init.d/mysql start korp # mysqladmin -u root password k1985p korp # mysql_secure_installation korp # rc-update add mysql default