Archive

Archive for the ‘Web 2.0 and something like that’ Category

Скрипт для добавления площадок с сайтами. Centos 6 + apache + nginx .

July 1st, 2012 1 comment

Всем доброго времени суток. Выкладываю простенький скрипт для автоматизации добавления площадок на сервер с centos, apache, nginx.
Для начала не забудьте включить поддержку acl для файловой системы в файле /etc/fstab и перезагрузиться, либо, перемонтировать раздел . Текст скрипта под катом.

Read more…

Внедрение nginx на примере работающего сервера с Centos 6.2

April 7th, 2012 1 comment

Сегодня будем рассматривать оптимизацию посредством внедрения nginx .

Изначальные условия: работающий сервер на centos 6.2, на котором стоит apache+php+mysql и несколько расширений и модулей для php, на которых мы заостряться не будем. На сервере крутится ~25 сайтов настроенных как virtual hosts.

Появилась необходимость настроить nginx как frontend и apache как backend соответственно. Последняя стабильная версия nginx оказалась в репозитории epel, который надо подключать отдельно. К сожалению там не оказалось по умолчанию некоторых модулей, и было принято решение собирать nginx самостоятельно. Для удобства, а так же в целях удобства администрирования было решено собирать rpm из src.rpm. Это даст нам возможность пересобрать пакет, если нас что-то не устроит, безболезненно его удалить, а так же не упустить никаких зависимостей пакета. В пакетных дистрибутивах, будь то rpm-based или deb-based, всегда рекомендуется установка из пакетов.

Для начала подключим репозиторий EPEL командой:

# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm

# rpm –import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL

Затем включим репозиторий с пакетами исходников, отредактировав файл /etc/yum.repos.d/epel.repo

# nano /etc/yum.repos.d/epel.repo

В секции epel-source меняем значение enabled=1 .

Далее установим пакеты необходимые для сборки:

# yum install yum-utils rpmdevtools gcc make

Скачиваем исходники пакета:

# yumdownloader –source nginx

Пакет скачается в директорию в которой мы находимся. Установим его:

# rpm –ivh nginx -1.0.14-1.el6.src.rpm

Не стоит пугаться сообщений вида:

warning: user mockbuild does not exist – using root

warning: group mockbuild does not exist – using root

Для нашей задачи эти уведомления никакой роли не играют. Ошибки здесь тоже никакой нет.

Установим зависимости исходников для сборки:

# yum-builddep nginx -1.0.14-1.el6.src.rpm

У нас появилась папка rpmbuild, а в ней папка SPECS, а в ней nginx.spec, отредактируем его:

# nano ~/rpmbild/SPECS/nginx.spec

Редактируем по своему желанию, а можем и оставить как есть.

Приступаем к сборке:

# rpmbuild -ba ~/rpmbuild/SPECS/nginx.spec

# cd ~/rpmbuild/RPMS/x86_64/

# ls –l

А вот и наш готовый пакет. Устанавливаем:

# rpm -ivh nginx-1.0.14-1.el6.x86_64.rpm

Первая часть закончена. Остается настроить.

Read more…

Тюнинг nginx: заставляем веб-сервер работать быстрее

March 28th, 2012 No comments

Сегодня речь пойдет о небольшой оптимизации веб-сервера nginx. Задача – уменьшить время загрузки веб-странички у клиентов. Решение – небольшой тюнинг конфигов nginx.

Разбираем конфиг nginx. По умолчанию находится в /usr/local/nginx/conf/nginx.conf  или в /etc/nginx/nginx.conf 🙂 В моем случае это первый вариант.

Редактируем:

# nano /usr/local/nginx/conf/nginx.conf

Видим конфиг:

# Пользователь, от которого работает nginx
user www-data www-data;
# Кол-во процессов – ставится значение, равное кол-ву ядер в системе
worker_processes 4;

# Пишем логи
error_log logs/error.log;
error_log logs/error.log notice;
error_log logs/error.log info;

# Кол-во соединений
events {
worker_connections 2048;
}

http {
# Подключаем mime
include mime.types;
default_type application/octet-stream;

# Запись Access-логов. По желанию. Можно добавлять в вирт. хосты
#access_log logs/access.log main;

# Лучше включить – значительно повышает скорость отдачи контента.
sendfile on;

# Каждому свое. Для блога на wordpress хорошо подходит параметр, равный 15.
keepalive_timeout 15;

# Если мы используем проксирование, то параметры удобнее вывести в отдельный файл:
include /etc/nginx/proxy.conf;

# Выключаем версию сервера
server_tokens off;

# Подключаем файл с виртуальными хостами
include /etc/nginx/sites-enabled/*;

# Параметры сжатия gzip
gzip on;
gzip_buffers 4 8k;
gzip_comp_level 7;
gzip_proxied any;
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;

# Включаем кеширование заголовков
expires max;

# Позволяет передавать файл в полных пакетах
tcp_nopush on;
# Разрешает/запрещает tcp_nodelay при переходе в состояние keep_alive
tcp_nodelay on;
}

Пока всё. Отредактируем proxy.conf:

# nano /etc/nginx/proxy.conf

# Переадресация прокси
proxy_redirect off;
# Передаем через прокси внешний IP клиента
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# Остальные параметры proxy
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;

nginx+apache+memcached+xcache: fast web-server

March 26th, 2012 No comments

Со временем каждый интернет-проект ждет неизбежное: либо он остается в тени и неизвестности, либо становится популярным и посещаемым. Посещаемость это хорошо, но готов ли к этому ваш сервер? С повышением нагрузки на проект обычно используют модель back-end+front-end, а именно связка nginx+apache.  Как это работает: все внешние соединения на себя принимает nginx, за отдачу статического содержимого (все изображения, стили, html, аудио и видео) отвечает так же он. Apache же в свое время отвечает только за статическое содержимое и во “внешку” не смотрит. Что бы их “связать” в nginx необходимо будет настроить проксирование.

Обновляем кеш репозитариев:

# aptutude update

Устанавливаем Apache, php, mysql и необходимые им модули:

# aptitude -y install apache2 php5 mysql-server libapache2-mod-auth-mysql php5-mysq mysql-admin libphp-jpgraph php5-imagick

Настраиваем Apache:

# nano /etc/apache2/ports.conf

По умолчанию Apache слушает внешние соединения на 80 порт. Исправим это, заменив Listen 80 на:

Listen localhost:8080

Далее отредактируем конфиг apache2.conf и вставим в самый низ строчку NameVirtualhost *:8080

# nano /etc/apache2/apache2.conf

Создадим новый VirtualHost в sites-available:

# nano /etc/apache2/sites-available/sitename.ru.conf

Вписываем туда:

<VirtualHost *:8080>
ServerName sitename.ru
ServerAlias www.sitename.ru
DocumentRoot /home/sitename.ru/public_html
</VirtualHost>

Подключим VirtualHost:

# ln -s /etc/apache2/sites-available/sitename.ru.conf /etc/apache2/sites-enabled/

На этом пока Apache оставим в покое. Установите nginx, используя эту статью.

nginx установлен, можно перейти к настройке:

# nano /usr/local/nginx/conf/nginx.conf

В секцию http добавим строчку:

http {

include /etc/nginx/sites-enabled/*;

}

Создадим папку с виртуальными хостами nginx:

# mkdir /etc/nginx/sites-enabled/

Создадим там файл sitename.ru:

# nano /etc/nginx/sites-enabled/sitename.ru

Отконфигурируем как в примере:

#Создайте свой VirtualHost и создайте файл, взяв за пример эти настройки
server {
# какой порт слушать
listen 80;
# доменное имя с www и без
server_name sitename.ru www.sitename.ru;
location / {
# адрес для перенаправления запроса. Т.е. наш Apache
proxy_pass http://localhost:8080/;
# передаём серверу Apache реальный IP юзера
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# типы файлов, обрабатываемые Nginx’ом
location ~* \.(gif|jpg|jpeg|png|ico|css|swf|js|html|htm|xml|txt|gz|bmp|xls)$ {
# директория веб-сервера
root /home/sitename.ru/public_html;
#Включаем mod_rewrite для wordpress
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php;
}
}
}

Устанавливаем memcached:

# aptitude install memcached

Устанавливаем xcache:

# aptitude install php5-xcache

Перезапускаем демоны:

/etc/init.d/apache2 restart

/etc/init.d/nginx restart

/etc/init.d/memcached restart

Готово! Теперь nginx принимает внешние соединение, рулит статикой и проксирует. Apache же занимается динамическим содержимым. Удачи!

Прекомпиляторы php: APC и xcache

March 25th, 2012 No comments

Пару дней назад я писал статью о том, как установить на сервер eAccelerator – прекомпилятор php, который кеширует скрипты для более быстрой отдачи динамического содержимого клиентам. За счет кеширования скриптов происходит более быстрая отдача, в итоге – сайт, скрипт или веб-приложение работает значительно быстрее. eAccelerator очень распространен среди прекомпиляторов php, но, к сожалению, его разработка уже не ведется полтора года, а официальный сайт является заглушкой и полезной информации в себе не несет.

Сегодня речь пойдет об альтернативных проектах – прекомпиляторах APC и xcache. по своим характеристикам они почти не отличаются друг от друга – при стандартных настройках я получил примерно одинаковые результаты (разница в ~0,01 сек), отднако, мой выбор упал на xcache: его версии выходят чаще, а так же его обещают включить в стандартную поставку php6. Но, не будем забегать слишком далеко и разберем установку каждого из вышеперечисленных прекомпиляторов.

1) Установка APC. Качаем и устанавливаем необходимые пакеты. Если в системе отсутствует gcc, установите его тоже.

# aptitude -y install php5-dev php5-pear

Устанавливаем сам APC:

pecl install apc

Далее нужно создать конфиг-файл, описывающий плагин:

# nano /etc/php5/conf.d/apc.ini

В файле описать:

“extension=apc.so”

Перезапускаем сервис Apache:

# /etc/init.d/apache2 restart

Готово. Проверить, корректно ли установился APC можно двумя способами:

# php -v

После ввода команды должна будет высветиться информация об активных модулях php, в том числе быть упоминания об APC-cache. Если информация о нем есть, значит все в порядке. Второй способ – phpinfo(). Создаем в папке веб-сервера файл phpinfo:

# nano /home/sitename/public_html/phpinfo.php

Вписываем туда код:

<?php phpinfo(); ?>

Далее открываем браузер, в адресной строке браузера набираем путь к phpinfo.php и ищем информацию об APC-cache. Если информация о нем есть, значит все в порядке.

2) Установка xcache. Его установка намного проще – она ограничивается всего лишь одним пакетом из aptitude:

# aptitude -y install php5-xcache

Дополнительно не помешает увеличить размер кеша, который по умолчанию составляет 16 мегабайт:

# nano /etc/php5/conf.d/xcache.ini

Меняем параметр xcache.size  на 64 мегабайта:

xcache.size  =                64M

Перезапускаем веб-сервер:

# /etc/init.d/apache2 restart

Если у вас nginx в качестве основного сервера (без Apache) – то перезапуск нужно делать запуск немного по другому:

# /etc/init.d/php-fastcgi restart

Или так:

# /etc/init.d/php-fpm restart

Модули php должны перегрузиться и xcache заработать. Для проверки можно воспользоваться php -v или phpinfo(), как в предыдущем примере. Удачи! 🙂