Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

00-tech-book

.pdf
Скачиваний:
42
Добавлен:
10.02.2016
Размер:
7.86 Mб
Скачать

xfers 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.