Category: Nginx

Мар 26 2009

Nginx, проксирование с файловым кешом

23 марта вышел nginx 0.7.44, в нем наконец то появилось обещенное кеширование в модуле проксирования. Что нам это дает?
Как правило nginx используют для проксирования на всевозможные тяжеловесные веб сервера, которые долго и тяжело обрабатывают запросы. Не даром среди модулей nginx присутствует замечательно выполненный модуль upstream, который позволяет гибко балансировать нагрузку при проксировании. Теперь же, при наличии большого дискового кеша, nginx сможет сам обрабатывать такие запросы, не беспокоя при этом бекэнды.
Read more »

Ноя 28 2008

Nginx, проксирование, балансировка, отказоустойчивость.

Nginx (читается энжин икс) — легковесный HTTP сервер, его автор Игорь Сысоев.

Насколько я понимаю стратегию разработки nginx, основной упор делается на развитие возможностей, обеспечивающих проксирование и отказоустойчивость. Этим в nginx занимаются два модуля:

  1. ngx_http_upstream
  2. ngx_http_proxy_module

С помощью модуля upstream, описывается так называемая ферма бекэнд HTTP серверов, на которые nginx будет проксировать запросы.
Read more »

Окт 19 2008

Логирование в nginx

Перечитывая документацию к nginx нашел такие интересные переменные у модуля ngx_http_upstream:
$upstream_addr — в ней хранится ip адрес бекэнда на который nginx направит запрос
$upstream_response_time — в ней хранится время ответа бекэнда
Логирование этих переменных позволит нам оценить работоспособность бекэндов и значительно упростить поиск «тормозящей» ноды

Окт 17 2008

Nginx + php.

Сегодняшний интернет без php представить невозможно. Nginx предоставляет возможность выполнять php скрипты, используя FastCGI.

То есть для того, что бы включить поддержку CGI в php.

Для этого, в FreeBSD делаем:

cd /usr/ports/lang/php5, и выбираем Build CGI version

После того как собран php, нам необходимо собрать расширения php,

идем в

cd /usr/ports/lang/php5-extensions

Тут следует заметить, что более правильным вариантом, является php c патчем php-fpm, взять его можно по адресу php-fpm, вариант этот как я смог заметить более стабильно работает и в одной и следующих статей я обязательно на нем остановлюсь.

После того как все необходимое собрано, php-cgi нужно запустить. Запустить его можно двумя вариантами:

  1. Используя spawn-cgi из комплекта lighthttpd
  2. С помощью скрипта. Скрипт запуска php:

#!/bin/sh
 
# PROVIDE: phpFcgid
# REQUIRE: LOGIN
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name="phpFcgid"
rcvar=`set_rcvar`
 
load_rc_config $name
: ${phpFcgid_enable="NO"}
: ${phpFcgid_users="www"}
: ${phpFcgid_children="5"}
 
start_cmd=phpFcgid_start
stop_cmd=phpFcgid_stop
 
phpFcgid_start() {
echo "Starting $name."
export PHP_FCGI_CHILDREN=${phpFcgid_chidlren}
for user in ${phpFcgid_users}; do
su -m ${user} -c "/usr/local/bin/php-cgi -b 127.0.0.1:9000 -q &"
echo "Test ${user}"
done
}
 
phpFcgid_stop() {
echo "Stopping $name."
pids=`pgrep php-cgi`
pkill php-cgi
wait_for_pids $pids
}
 
run_rc_command "$1"

Скрипт надо разместить в /usr/local/etc/rc.d/ под именем, допустим phpFcgid.sh

Делаем chmod +x  /usr/local/etc/rc.d/phpFcgid.sh

потом

echo «phpFcgid_enable=YES» >> /etc/rc.conf

Теперь php можно запустить

/usr/local/etc/rc.d/phpFcgid.sh start

Проверяем ps afx|grep php-cgi

И если мы все сделали правильно, то должны увидеть примерно такое:

68147  qc  I      0:00,03 /usr/local/bin/php-cgi -b 127.0.0.1:9000 -q

Теперь можно приступать к этапу конфигурирования nginx.

По сравнению с конфигурацией, приведенной в предыдущем посте,

необходимо добавить еще один локайшен, такого типа:

location ~ \.php$ { # Описываем, что локейшн будет обрабатывать
#все файлы с расширением php
fastcgi_pass   127.0.0.1:9000; #Указываем адрес на котором
#отвечает php FastCGI сервер
fastcgi_index  index.php; #Индекс для модуля FastCGI
fastcgi_param  SCRIPT_FILENAME  /home/www/htdocs/hilik.org.ua/$fastcgi_script_name;
#Путь к файлам к файлам которые будет
#обрабатывать FastCGI сервер
include        fastcgi_params; #Подключение файла со стандартными
#параметрами для модуля FastCGI
}

На этом можно поставить точку. Поддержка php в nginx включена.

Окт 16 2008

Nginx, просто и быстро.

Nginx, простой и быстрый HTTP сервер и почтовый прокси сервер.

Его автор, Игорь Сысоев, ведет очень активную разработку.

Cоздать простой HTTP сервер для отдачи статики очень просто.

Пример простого конфига:

user  www; #Пользователь от которого будет работать nginx
worker_processes  1; #количество процессов которые будут обслуживать запросы клиентов
error_log  /var/log/nginx/nginx-error.log; #Лог файл в которые будут выводится записи об ошибках
pid        /var/run/nginx.pid; #Место где сохраится PID
events {

use kqueue; #Это метод обслуживания соединений,

#под современными FreeBSD

#kqueue самый быстрый метод

worker_connections  1024; #Количество оденовременных соединений,

#которые будет обслуживать 1

# рабочий процесс(worker)

}
http { #Тут начинается описание части непосредственно

#отвечающей за HTTP

include       mime.types; #Файл в котором описаны все возможные MIME

#types(типы документов),

#возвращаемые в заголовке

default_type  application/octet-stream; #Mime type,

#который возвращается по умолчанию(в случае,

#если описание в файле не найдено

log_format  main  ‘$remote_addr — $remote_user [$time_local] $request ‘
‘»$status» $body_bytes_sent «$http_referer» ‘
‘»$http_user_agent» «$http_x_forwarded_for»‘; #Определяем формат

#log файла

server { #Тут начинается конфигурация

#виртуального сервера

listen       89.252.34.107:80 default; #Тут определяется на каком

#ip и порту слушает наш сервер

server_name  hilik.org.ua www.hilik.org.ua; # Имена на которые

#откликается наш сервер

access_log  /var/log/nginx/hilik.org.ua-access.log main; #путь к файлу

#и формат

# в котором логируются все запросы к серверу

location / { #Мощный механизм

#в nginx, устанавливает конфигурацию

#сервера в соответствии с URI

#запроса, что очень удобно

#location можно описывать

#регекспом

root   /home/www/htdocs/hilik.org.ua; #Описывает корневой

#каталог сервера

autoindex on; #Директива разрешает выводить

#список файлов в случае отсутствия

#индекса

index index.html; #Индексный файл сервера

}

}

}

Приведенная конфигурация, позволяет запустить в работу простой вебсервер. На сегодняшний день, не смотря на то, что не вышла версия 1.0 nginx, он все больше и больше набирает популярность. Релиз 1.0 Игорь Сысоев обещает выпустить к тому моменту, когда полностью определится с API сервера.

Самые сильные стороны nginx проявляются в роли проксирующего сервера, обеспечивающего отказоустойчивость и балансировку нагрузки.

Мое личное мнение — не в версиях счастье. Главное, что nginx позволяет решать задачи, которые с помощью других инструментов(apache, lighthttpd) решить намного сложнее.


Украинская Баннерная Сеть