00-tech-book
.pdfxfers running – сколько сейчас зон передается;
xfers deffered – сколько передач зон отложено;
soa queries in progress – сколько происходит запросов soa-записей в
настоящий
момент;
query logging is OFF – журналирвоание запросов отключено;
recursive clients – число обрабатываемых рекурсивных запросов;
tcp clients – сколько клиентов;
server is up and running – сервер запущен и функционирует.
Еще один инструмент мониторинга DNS – программа dnstop. Я о ней подробнее написал в модуле“Резервное копирование”. Поставить ее можно из репозитария EPEL.
Резюме
ВэтоммодулемывыясниликакработаетDNS-серверикаконвзаимодействует
с другими серверами. Разобрались с записями в файле зоны и опциями в конфигурационном файле named.conf. Это далеко не все опции которые бывают, но в случае необходимости без проблем сможете “докрутить” DNSсервер под свои нужды, так как знаете о нем достаточно чтобы эффективно администрировать его. По опыту скажу, что что-то большее может потребоваться только в крупных сетях с нагруженными серверами, и даже в этом случае чего-то сверх-ординарного от вас не потребуется.
Домашнее задание
Сделайте 4 виртуальные машины. На двух делаем DNS-сервера – master и slave, на двух других достаточно будет просто Linux, они будут клиентам. Пусть первый клиент выполняет запросы через master, второй через slave. Slave работает через master, master смотрим в Интернет через вашего
провайдера. Заведите зону (а лучше несколько) на master-сервере и убедитесь что она передана на slave. Ваши сервера могут быть из одной сети - правило разных сетей класса C действует в публичных сетях, в своей песочнице делайте как хотите.
Модуль 13. DNS-сервер. BIND. |
|
191 |
|
|
|
|
|
Nginx
Nginx (engine x) — это очень быстрый HTTP сервер, который часто используют вместо или совместно с Apache, чтобы снизить нагрузку на сервер и увеличить скорость обработки запросов посетителей.
Что сам автор говорит о Nginx:
“Я начал разрабатывать nginx весной 2002 года, а осенью 2004 года вышел первый публично доступный релиз. На данный момент nginx работает на нескольких достаточно нагруженных сайтах под FreeBSD и Linux, в том числе на большинстве серверов Рамблера, и я рассматриваю версию nginx-0.6.35 как стабильную с точки зрения надёжности. Однако функциональность некоторых модулей будет меняться, вследствие чего, будут меняться и директивы, поэтому обратной совместимости до версии 1.0.0 не гарантируется.”
Преимущества Nginx
Модульная архитектура Apache предоставляет большие возможности, однако они редко когда полностью востребованы. Ценой за большую функциональность является большой расход системных ресурсов. В массе своей сайты содержат больше статических объектов (HTML, изображения, файлы стилей) для обработки которых не нужен большой функционал. Запросы являются простыми и следовательно обрабатывать такие запросы нужно простым и легковесным веб-сервером, таким как Nginx. К примеру, 10 000 неактивных keep-alive соединений занимают примерно 2.5 Мб памяти.
Варианты использования Nginx
standalone
Самая легкая в настройке конфигурация. Nginx и Apache работают на разных портах или ip-адресах. Например, адрес всех картинок images.server.ru, этот сервер в свою очередь является Nginx-серверов. Следовательно запросы картинок и прочего статического контента направляются на Nginx-сервер. Если запросов статического контента очень много, то имеет смысл купить отдельный сервер под его обслуживание и поставить на него Nginx.
Frontend к Apache
Так |
называемое “акселерированное проксирование ” при котором |
|
|
|
|
|
|
все |
запросы сначала направляются на Nginx. Если происходит запрос |
||
|
|
|
|
|
192 |
|
Модуль 14. HTTP сервер: Nginx. |
|
|
|
|
статического контента то Nginx сам его обрабатывает, если запрос скрипта то он переадресовывается к Apache.
Nginx + FastCGI
Если скрипты сайта написаны на языке программирования интерпретатор которого понимает технологию FastCGI то Apache нам вообще не нужен. Примерами таких языков являются Perl, PHP и многие другие. Минус этого способа – возможно потребуется модификация скриптов.
Установка EPEL
В базовых репозиториях CentOS 5.2 Nginx отсутствует. Для того чтобы его поставить из пакета нам нужно подключить репозиторий EPEL.
EPEL - Extra Packages for Enterprise Linux, репозиторий поддерживаемый добровольцами и содержащий в себе популярные и нужные пакеты. На момент написания этих строк репозиторий содержал в себе примерно 2800 пакетов.
Посмотрим что содержит в себе rpm-пакет
# rpm -qpl http://download.fedora.redhat.com/pub/epel/5/i386/epel-release- 5-3.noarch.rpm
/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
/etc/yum.repos.d/epel-testing.repo
/etc/yum.repos.d/epel.repo
/usr/share/doc/epel-release-5
/usr/share/doc/epel-release-5/GPL
То есть по сути просто файл .repo который содержит в себе ссылку на новый репозиторий.
Ставим EPEL-пакет
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-
5-3.noarch.rpm
Проверяем список репозиториев
# yum repolist
Модуль 14. HTTP сервер: Nginx. |
|
193 |
|
|
|
Установка Nginx с поддержкой PHP. Настраиваем связку Nginx + FastCGI.
Установка Nginx и сопутствующих сервисов.
Сам по себе Nginx не умеет обрабатывать php-скрипты. Для этого нужно запустить php в режиме FastCGI-сервер и все запросы *.php направлять на него.
Устанавливаем Nginx
# yum -y install nginx
Добавляем в автозагрузку при старте сервера
# chkconfig nginx on
Ставим пакет php-cli который содержит в себе php-cgi. Он то и будет обрабатывать наши php-скрипты.
# yum -y install php-cli
Устанавливаем CGI-сервер spawn-fcgi (входит в комплект поставки lighttpd)
# yum -y install spawn-fcgi
Запускаем CGI-сервер на порту 9000
# spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi
Проверяем, слушает ли CGI-сервер нужный наш порт
# netstat -nlp | grep :9000
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 6395/php-cgi
Готовим скрипт автоматизации работы spawn-fcgi
# cat /etc/rc.d/init.d/spawn-fcgi
#!/bin/bash
#chkconfig: - 80 20
#description: Starts and stops FastCGI server for Nginx
SPAWN=»/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi» RETVAL=0
case «$1» in start)
|
194 |
|
Модуль 14. HTTP сервер: Nginx. |
|
|
|
|
$SPAWN RETVAL=$?
;;
stop)
killall -9 php-cgi RETVAL=$?
;;
*)
echo «Usage: spawn-cgi {start|stop}» exit 1
;;
esac
exit $RETVAL
Добавляем spawn-fcgi в автозагрузку при старте сервера
# chkconfig spawn-fcgi on
Устанавливаем правильные права на скрипт
# chmod 755 /etc/init.d/spawn-fcgi
Мы настроили доступ к репозиторию EPEL, который содержит в себе массу полезных пакетов. Установили Nginx, PHP и spawn-fcgi который будет предоставлять FastCGI-сервис на нужном порту. Также написали скрипт автоматизации запуска и управления spawn-fcgi. Для других пакетов в этом
нет необходимости так как все есть.
Конфигурирование Nginx + FastCGI
Файлы Nginx и их расположение.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/var/log/nginx/ |
|
|
|
|
|
логи Nginx; |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
/usr/sbin/nginx |
||||||||||||||||||||||||
|
|
|
|
|
|
программа Nginx; |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
/usr/share/nginx |
|
|
|
|
|
файлы веб-сервера; |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
/etc/rc.d/init.d/nginx |
||||||||||||||||||||||||
|
|
|
скрипт запуска Nginx; |
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
/etc/logrotate.d/nginx |
политика ротации логов для Logwatch; |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
/etc/nginx/ |
|
|
|
каталог с конфигурационными файлами Nginx; |
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
/etc/sysconfig/nginx |
||||||||||||||||||||||||
|
|
|
|
это файл содержащий в переменной путь к |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
основному; конфигурационному файлу Nginx; |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|||||||||||||||||
|
/etc/php.ini |
||||||||||||||||||||||||
|
|
|
|
|
|
|
файл с настройками PHP; |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||
|
/etc/php.d/ |
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
дополнительные файлы настроек для PHP. |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Наш файл nginx.conf будет таким:
Модуль 14. HTTP сервер: Nginx. |
|
195 |
|
|
|
# cat /etc/nginx/nginx.conf
user nginx; worker_processes 1;
# [ debug | info | notice | warn | error | crit ]
error_log /var/log/nginx/error.log info; pid /var/run/nginx.pid;
events { worker_connections 1024;
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; use epoll;
http {
include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request ' '»$status» $body_bytes_sent «$http_referer» ' '»$http_user_agent» «$http_x_forwarded_for»';
access_log /var/log/nginx/access.log main;
client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m;
client_header_buffer_size 1k; large_client_header_buffers 4 4k;
gzip on; gzip_min_length 1100; gzip_buffers 4 8k; gzip_types text/plain;
output_buffers 1 32k; postpone_output 1460;
sendfile on; tcp_nopush on; tcp_nodelay on;
keepalive_timeout 60;
include /etc/nginx/conf.d/*.conf;
|
196 |
|
Модуль 14. HTTP сервер: Nginx. |
|
|
|
|
server {
listen 80;
server_name company.ru www.company.ru;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; ssi on;
}
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
|
|
include |
fastcgi_params; |
|
} |
|
|
location /status { stub_status on; access_log off; allow 192.168.146.1; deny all;
}
error_page 404 /404.html; location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html; location = /50x.html {
root /usr/share/nginx/html;
}
location /old_dir/ {
rewrite ^/old_dir/(.*)$ /new_dir/$1 permanent;
}
location ~ /\.ht { deny all;
}
}
# Virtual host company2.ru server {
listen 80;
server_name company2.ru www.company2.ru;
Модуль 14. HTTP сервер: Nginx. |
|
197 |
|
|
|
access_log /var/log/nginx/company2.access.log; error_log /var/log/nginx/company2.error.log error;
location / {
root /home/company2.ru; index index.html index.php;
}
error_page 404 /404.html; location = /404.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html; location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/company2.ru$fastcgi_script_name; include fastcgi_params;
}
}
}
# service nginx start
Понижаем нагрузку на основной веб-сервер.
Установка Nginx как Frontend к Apache.
Принцип работы будет заключаться в следующем. Nginx работая на порту 80 будет принимать все запросы к веб-серверу. В соответствие со своим списком расширений он будет отдавать статику, все остальные запросы будет направлять к Apache который работает на порту 8080 (в моем случае на том же сервере). Если Apache и Nginx работают на одном сервер то можно писать как “Listen 127.0.0.1:8080”, в этом случае кроме Nginx доступ к вебсерверу Apache больше никто не получит.
Устанавливаем Apache
# yum -y install httpd httpd-devel
|
198 |
|
Модуль 14. HTTP сервер: Nginx. |
|
|
|
|
Добавляем httpd в автозагрузку
# chkconfig httpd on
В конфигурационном файле /etc/httpd/conf/httpd.conf меняем директиву Listen 80 на Listen 127.0.0.1:8080 (или какой там у вас IP-адрес) Другие настройки – по вашему желанию.
Listen 127.0.0.1:8080
Устанавливаем php. Настройки по вашему желанию.
# yum -y install php
Устанавливаваем Nginx
# yum -y install nginx
Добавляем Nginx в автозагрузку
# chkconfig nginx on
Конфигурирование Nginx
user nginx; worker_processes 1;
# [ debug | info | notice | warn | error | crit ] error_log /var/log/nginx.error_log info; pid /var/run/nginx.pid;
events { worker_connections 1024;
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; use epoll;
}
http {
include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request ' '»$status» $body_bytes_sent «$http_referer» ' '»$http_user_agent» «$http_x_forwarded_for»';
access_log /var/log/nginx/access.log main;
Модуль 14. HTTP сервер: Nginx. |
|
199 |
|
|
|
client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m;
client_header_buffer_size 1k; large_client_header_buffers 4 4k;
gzip on; gzip_min_length 1100;
|
|
|
|
|
|
gzip_buffers |
4 8k; |
||||
|
|
|
|
|
|
gzip_types |
text/plain; |
||||
|
|
|
|
||
output_buffers |
1 32k; |
||||
|
|
|
|
|
|
postpone_output |
1460; |
|
|
sendfile on; tcp_nopush on; tcp_nodelay on;
keepalive_timeout 60;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name company.ru www.company.ru;
location / {
proxy_pass http://127.0.0.1:8080; proxy_redirect off; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 75; 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;
}
location ~* ^.+\.(jpg|gif|avi|mp3|zip|js)$ { root /var/www/html/media;
200 |
|
Модуль 14. HTTP сервер: Nginx. |
|
|
|