Высокопроизводительный веб-сервер на базе Nginx
30-03-2012. Разместил: synergix Не так давно потребовалось мне настроить высокопроизводительный веб-сервер при весьма скромных ресурсах (VDS). Хостер предоставлял на выбор несколько операционных систем, среди которых значилась и FreeBSD, чем я не преминул воспользоваться. Учитывая скудость ресурсов, было решено ставить джентльменский набор обеспечения: nginx, php-fm, mysql, memcache, eaccelerator.
Что собственно хотелось достичь:
1. Малое потребление ресурсов.
2. Высокую скорость отклика.
3. Стабильность под большой нагрузкой.
Определившись с ПО, начинаем установку.
Для начала, традиционно обновляем коллекцию портов, скопировав файлик /usr/share/exampeles/cvsup/ports-supfile в /etc и поправив в нем строчку default host на предпочтительный cvs-сервер:
csup -g -L 2 /etc/ports-supfile
Закончив синхронизацию, ставим Nginx:
cd /usr/ports/www/nginx
make install clean
После завершения установки Nginx ставим PHP:
cd /usr/ports/lang/php52
make install clean
В окне выбираем
Все дополнения для PHP у нас собраны в мета-порте php5-extensions:
cd /usr/ports/lang/php52-extension
make install clean
Нам покажут симпатичное окошко с доступными модулями, выбираем нужные нам в зависимости от используемых в движке сайта.
Ставим MySQL:
cd /usr/ports/database/mysql55-server
make install clean
Не забываем после установки задать пароль root для MySQL:
mysql -u root mysql
>SET PASSWORD FOR root@localhost=PASSWORD('new_password');
Ставим memcache:
cd /usr/ports/databases/pecl-memcache
make install clean
В процессе установки в файл /usr/local/etc/php/extensions.ini автоматически добавится строчка
extension=memcache.so
И eAccelerator:
cd /usr/ports/www/eaccelerator
make install clean
Настраиваем его в соответствии с этой статьей.
Ну и напоследок phpMyAdmin:
cd /usr/local/databases/phpmyadmin
make install clean
Закончив установку всего необходимого, приступаем к настройке.
Начнем с правки основного конфига Nginx:
user www;
worker_processes 1;
error_log /var/log/nginx/error.log;
events {
worker_connections 1024;
use kqueue;
}
https {
include mime.types;
index index.html index.htm index.php;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
charset utf-8;
source_charset utf-8;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$https_referer" '
'"$https_user_agent" "$https_x_forwarded_for"';
server {
listen 80;
server_name _; #Задано таким образом для обработки любого домена
server_name_in_redirect off;
access_log /var/log/nginx/access.log main;
client_max_body_size 10M;
root /web/site.my;
#Подключаем собственно php-fm через unix-сокеты
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
#Поскольку сайтов планируем больше одного, сделаем раздельные конфиги.
include /usr/local/etc/nginx/sites/*.conf;
}
Не забываем создать папочку для логов nginx:
cd /var/log
mkdir nginx
Заодно приложу пример для еще одного сайта.
Создаем папку для пользовательских конфигов и собственно конфиг:
mkdir /usr/local/etc/nginx/sites/
touch /usr/local/etc/nginx/sites/site2.my.conf
ee site2.my.conf
И собственно конфиг:
server {
listen 80;
server_name site2.my www.site2.my;
access_log /var/log/nginx/site2.my-access.log main;
error_log /var/log/nginx/site2.my-error.log main;
root /web/site2.my;
#Подключаем собственно php-fm через unix-сокеты
location ~ .php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /.ht {
deny all;
}
}
Правим конфиг /usr/local/etc/php-fpm.conf для работы php-fm через unix-сокеты для получения максимальной производительности. Ищем строчку 127.0.0.1:9000 и меняем на
<value name "listen_address">/var/run/php-fpm/php-fpm.sock</value>
Добавляем следующие строчки в /etc/rc.conf для запуска:
nginx_enable="YES"
php_fpm_enable="YES"
mysql_enable="YES"
И запускаем:
service nginx start
service php-fpm start
service mysql-server start
В домашнюю директорию (а у нас она /web/site.my) кладем файлик index.php, содержимое которого
<?php
phpinfo();
?>
И открываем его в браузере по адресу http://site.my/
Полюбовавшись на информацию касательно установленных компонентов, перегружаем VDS.
Убедившись что все сервисы корректно запустились - начинаем заливать контент на VDS.
P.S. Конечно же, не забываем настроить файерволл.
Вернуться назад