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
 

Добавить комментарий