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

00-tech-book

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

 

 

 

 

 

access_log off;

 

 

 

 

 

 

 

 

expires

30d;

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

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;

}

}

}

Установка mod_rpaf

Запросы к Apache приходят с IP-адреса frontend-сервера, что в свою очередь не позволяет собирать статистику и вести log-файлы по посетителям. Тут нам на помощь приходит модуль mod_rpaf, который служит для замены IP-адреса Frontend-сервера на адрес посетителя и мы просто не замечаем Nginx на свое пути.

Скачиваем src-пакет mod_rpaf

# wget http://repo.redhat-club.org/redhat/5/SRPMS/mod_rpaf-0.6-el5.rhc.1.src.rpm

Устанавливаем rpm-build, так как придется пересобрать rpm-пакет.

# yum -y install rpm-build

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

# rpmbuild --rebuild mod_rpaf-0.6-el5.rhc.1.src.rpm

Устанавливаем пересобранный пакет в систему

# rpm -Uvh /usr/src/redhat/RPMS/i386/mod_rpaf-0.6-.1.i386.rpm

В /etc/httpd/conf/httpd.conf добавляем:

Модуль 14. HTTP сервер: Nginx.

 

201

 

 

 

 

 

LoadModule rpaf_module modules/mod_rpaf-2.0.so

RPAFenable On

RPAFsethostname Off

RPAFproxy_ips 127.0.0.1 192.168.146.132

RPAFheader X-Real-IP

# service httpd restart

Проверка работоспособности mod_rpaf

Создаем страничку index.php со следующим содержанием:

<?

echo $_SERVER['REMOTE_ADDR'];

?>

С включенным mod_rpaf переменная REMOTE_ADDR будет содержать ваш IP-адрес. С отключенным 127.0.0.1

Работа выполнена. Теперь любые файлы с расширениями jpg,gif,avi,mp3,zip и js будут отдаваться через Nginx. Все остальные запросы будут перенаправлены к Apache на linuxbox:8080

Включение SSL

Сейчас я покажу как подключить SSL к Nginx и настроить работу с PHPскриптами (тоже самое что и не у SSL-режима).

Генерируем ключ и сертификат (если нет openssl то ставим – yum -y install openssl)

#openssl genrsa -des3 -out server.key.crypt 1024

#openssl rsa -in server.key.crypt -out server.key

#openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt

#rm -f server.key.crypt

Файлы server.key и server.crt необходимо расположить в /etc/nginx/

Файл ssl.conf должен быть таким

# cat /etc/nginx/conf.d/ssl.conf

202

 

Модуль 14. HTTP сервер: Nginx.

 

 

 

server {

listen 443;

server_name company.ru www.company.ru;

ssl on; ssl_certificate server.crt; ssl_certificate_key server.key;

ssl_session_timeout 10m;

#ssl_protocols SSLv2 SSLv3 TLSv1;

#ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

#ssl_prefer_server_ciphers on;

location / {

root /usr/share/nginx/html; index index.php index.html;

}

location ~ \.php$ {

if (!-f $request_filename) {

return 404;

}

fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

 

 

 

include

fastcgi_params;

}

 

 

}

# service nginx restart

Использование двух версий PHP в Nginx одновременно

Для использования двух версий PHP одновременно, например 4 и 5 делаем

следующее:

http {

index index.php;

root /usr/share/nginx/html;

#PHP 4 скрипты будут с расширением .php4 location ~ .*\.php4?$ {

fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php4;

}

#PHP 5 скрипты будут с расширением .php5 location ~ .*\.php5$ {

fastcgi_pass 127.0.0.1:9001; fastcgi_index index.php5;

}

}

Модуль 14. HTTP сервер: Nginx.

 

203

 

 

 

Ну и соответственно запускаем spawn-fcgi для PHP 4 и PHP 5

#/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi4

#/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9001 -u nginx -g nginx -f /usr/bin/php-cgi5

Примеры производительности с Nginx и без него.

Здесь я приведу некоторые замеры производительности систем с Nginx и без него, чтобы стало понятно ради чего все затевалось.

Хостинг-сервер обслуживающий 150 сайтов

Средняя нагрузка

Использование процессора

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

204

 

Модуль 14. HTTP сервер: Nginx.

 

 

 

 

 

 

 

Использование памяти

Описание директив конфигурационного файла

Ниже я привел описание популярных директив конфигурационного файла.

 

 

 

 

 

user

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт пользователя и группу, с правами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

которого будут работать рабочие процессы. Если

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

группа не задана, то используется группа, имя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

которой совпадает с именем пользователя;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

worker_processes

 

Директива задаёт число рабочих процессов;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

error_log

 

 

 

 

Директива задаёт URI, который будет показываться

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

для указанных ошибок. Директивы наследуются с

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

предыдущего уровня при условии, что на данном

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уровне не описаны свои директивы error_page. В URI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можно использовать переменные;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

pid

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт файл, в котором хранится номер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

основного процесса;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

use epoll

 

 

 

 

epollэффективный способ обработки соединений в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Linux ядра 2.6. Рекомендуется;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

include

 

 

 

 

 

 

 

 

 

 

 

Директивой

подключаются

дополнительные

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

конфигурационные файлы;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

default_type

 

 

 

 

 

 

 

 

 

MIME-тип по умолчанию;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

log_format

 

 

 

 

 

 

 

 

 

 

 

 

 

Задает формат лог-файла;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

access_log

 

Указывает на файл в котором будут сохраняться

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сообщения о запросах;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Модуль 14. HTTP сервер: Nginx.

 

205

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c l i e n t _ h e a d e r _

 

 

 

Директива задаёт таймаут при чтении заголовка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

timeout

 

 

 

 

 

 

 

 

запроса клиента. Если по истечении этого времени

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клиент не передаст полностью заголовок запроса, то

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ему возвращается ошибка «Request time out” (408);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

client_body_timeout

 

 

 

 

Директива задаёт таймаут при чтении тела запроса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клиента. Таймаут устанавливается не на всю передачу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

тела запроса, а только между двумя операциями

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

чтения. Если по истечении этого времени клиент

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ничего не передаст, то ему возвращается ошибка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«Request time out” (408);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

send_timeout

 

 

 

 

 

 

 

Директива задаёт таймаут при передаче ответа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клиенту. Таймаут устанавливается не на всю передачу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ответа, а только между двумя операциями записями.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если по истечении этого времени клиент ничего не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

примет, то nginx закрывает соединение;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

c l i e n t _ h e a d e r _

 

Директива задаёт размер буфера для чтения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

buffer_size

 

 

 

 

 

заголовка запроса клиента. Для подавляющего

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

большинства запросов вполне достаточно буфера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размером в 1K. Однако если в запросе есть большие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cookies или же запрос пришёл от wap-клиента,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

то он может не поместиться в 1K. Поэтому, если

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строка запроса или строка заголовка запроса не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

помещается полностью в этот буфер, то выделяются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

большие буферы, задаваемые директивой large_

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

client_header_buffers;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

large_client_header_

 

 

 

 

Директива задаёт максимальное число и размер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

буферов для чтения большого заголовка запроса

 

 

 

 

buffers

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

клиента. Строка запроса должна быть не больше

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размера одного буфера, иначе клиенту возвращается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ошибка «Request URI too large” (414). Длинная строка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовка запроса также должна быть не больше

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размера одного буфера, иначе клиенту возвращается

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ошибка “Bad request” (400). Буферы выделяются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

только по мере необходимости. По умолчанию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размер одного буфера равен размеру страницы,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в зависимости от платформы это или 4K, или 8K.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Если по окончании обработки запроса соединение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переходит в состояние keep-alive, то эти буферы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

освобождаются;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gzip

 

 

 

 

 

 

 

 

 

 

Разрешает или запрещает сжатие ответа методом

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gzip;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gzip_min_length

 

Устанавливает минимальную длину ответа, для которых бу-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

дет выполняться сжатие ответа методом gzip. Длина опреде-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ляется только из строки“Content-Length”заголовка ответа;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

206

 

Модуль 14. HTTP сервер: Nginx.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gzip_buffers

 

 

 

Директивазадаётчислоиразмербуферов,вкоторыебудет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сжиматься ответ. По умолчанию размер одного буфера

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

равен размеру страницы, в зависимости от платформы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

это или 4K, или 8K. До версии 0.7.28 по умолчанию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

использовалось 4 буфера размером 4K или 8K;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

gzip_types

 

 

 

 

Разрешает сжатие ответа методом gzip для указанных

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

MIME-типов в дополнение к “text/html”. “text/html”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сжимается всегда;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sendfile

 

 

 

 

 

 

 

 

 

Директива разрешает или запрещает использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sendfile();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tcp_nopush

 

 

 

 

 

Директива разрешает или запрещает использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

опции TCP_NOPUSH во FreeBSD или TCP_CORK в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Linux. Опции включаются только при использование

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

sendfile. Включение опции позволяет

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- передавать заголовок ответа и начало файла в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

одном пакете в Linux и во FreeBSD 4.x;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

- передавать файл в полных пакетах.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

tcp_nodelay

 

 

 

 

Директива разрешает или запрещает использовать

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

опцию TCP_NODELAY. Опция включаются только при

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

переходе соединения в состояние keep-alive.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт таймаут, в течение которого keep-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

alive соединение с клиентом не будет закрыто со

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

стороны сервера. Второй параметр задаёт значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в строке “Keep-Alive: timeout=время” в заголовке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ответа. Параметры могут отличаться друг от друга.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Строку “Keep-Alive: timeout=время” понимают

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Mozilla и Konqueror. MSIE сам закрывает keep-alive

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

соединение примерно через 60 секунд;

 

 

 

 

 

 

 

 

 

 

 

keepalive_timeout

Директива задаёт таймаут, в течение которого keep-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

alive соединение с клиентом не будет закрыто со

 

 

 

 

 

 

 

 

 

 

 

 

 

стороны сервера;

 

 

 

 

 

 

 

 

 

 

 

 

server {...}

 

Директива задаёт конфигурацию для виртуального

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сервера. Чёткого разделения виртуальных серверов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ip-based (на основании ip-адреса) и name-based (на

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

основании имени, передаваемого в строке “Host”

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заголовка запроса), нет. Вместо этого директивами

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

listen описываются все адреса и порты, на которых

 

 

 

 

 

 

 

 

 

 

 

 

нужно принимать соединения для этого сервера, и

 

 

 

 

 

 

 

 

 

 

 

 

 

в директиве server_name указываются все имена

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

серверов. Пример конфигурации описан в примере

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

настройки виртуальных хостов;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Модуль 14. HTTP сервер: Nginx.

 

207

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

listen

 

 

 

 

 

 

 

 

 

 

Директива задаёт адрес и порт, на которых сервер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

принимает запросы. Можно указать только адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

или только порт, кроме того, адрес может быть

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

именем сервера;

 

 

 

 

 

 

 

 

 

 

server_name

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт имена виртуального сервера;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

location {...}

 

 

 

 

 

 

 

 

Директива

устанавливает

конфигурацию

 

в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зависимости от URI запроса;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_pass

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт адрес проксируемого сервера и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

URI, на который будет отображаться location. Адрес

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

может быть указан в виде доменного имени или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

адреса и порта;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_redirect

 

 

 

 

 

 

Директива задаёт текст, который нужно изменить

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

в строках заголовка «Location” и “Refresh” в ответе

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проксируемого сервера;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_set_header

 

 

 

 

 

Директива

позволяет

переопределять

или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

добавлять строки заголовка запроса, передаваемые

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проксируемому серверу. В качестве значения можно

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

использовать текст, переменные и их комбинации;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

client_max_body_

 

 

 

Директива задаёт максимально допустимый размер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

size

 

 

 

тела запроса клиента, указываемый в строке

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

«Content-Length” в заголовке запроса. Если размер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

больше заданного, то клиенту возвращается ошибка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

“Request Entity Too Large” (413). Следует иметь в виду,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

что браузеры не умеют корректно показывать эту

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ошибку;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

client_body_buffer_

Директива

задаёт размер буфера для чтения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

size

 

 

 

тела запроса клиента. Если тело запроса больше

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

заданного буфера, то всё тело запроса или только

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

его часть записывается во временный файл. По

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

умолчанию

размер одного

буфера равен

двум

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размерам страницы, в зависимости от платформы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

это или 8K, или 16K;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт таймаут для соединения с

 

 

p r o x y _ c o n n e c t _

 

 

 

 

 

 

 

 

 

 

timeout

 

 

проксированным сервером. Необходимо иметь в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

виду, что этот таймаут не может быть больше 75

 

 

 

 

 

 

 

 

 

 

 

 

 

секунд;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_send_timeout

 

 

 

 

Директива задаёт таймаут при передаче запроса

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проксированному серверу. Таймаут устанавливается

 

 

 

 

 

 

 

 

 

 

 

 

 

не на всю передачу запроса, а только между двумя

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

операциями записи. Если по истечении этого

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

времени проксируемый сервер не примет новых

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

данных, то nginx закрывает соединение;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

208

 

Модуль 14. HTTP сервер: Nginx.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_read_timeout

 

 

 

 

Директива задаёт таймаут при чтении ответа прок-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

сированного сервера. Таймаут устанавливается не

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

на всю передачу ответа, а только между двумя опе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рациями чтения. Если по истечении этого времени

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

проксируемый сервер ничего не передаст, то nginx

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

закрывает соединение;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_buffer_size

Директива задаёт размер буфера, в который будет чи-

 

 

 

 

 

 

 

 

 

 

 

 

 

таться первая часть ответа, получаемого от проксируе-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мого сервера. В этой части ответа находится, как пра-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вило, небольшой заголовок ответа. По умолчанию раз-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

мер буфера равен размеру одного буфера в директиве

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_buffers, однако его можно сделать меньше;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

proxy_buffers

Директива задаёт число и размер буферов для одно-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

го соединения, в которые будет читаться ответ, по-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

лучаемый от проксируемого сервера. По умолчанию

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

размер одного буфера равен размеру страницы, в

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

зависимости от платформы это или 4K, или 8K;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

root

 

 

 

 

Директива задаёт корневой каталог для запросов;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

error_page

 

 

 

 

 

 

 

 

 

 

 

Директива задаёт URI, который будет показывать-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ся для указанных ошибок. Директивы наследуются

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

с предыдущего уровня при условии, что на данном

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уровне не описаны свои директивы error_page. В URI

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

можно использовать переменные;

 

 

 

 

 

 

 

 

 

 

 

 

access_log

Директива access_log задаёт путь, формат и размер

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

буфера для буферизированной записи в лог. На одном

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

уровне может использоваться несколько логов. Пара-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

метр“off”отменяет все директивы access_log для теку-

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

щего уровня. Если формат не указан, то используется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

предопределённый формат“combined”;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

expires

 

Разрешает или запрещает добавлять или менять

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

строки «Expires” и “Cache-Control” в заголовке ответа.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В качестве параметра можно задать положительное

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

или отрицательное время.

 

 

Резюме

Мы выяснили что такое Nginx и зачем он нужен, разобрали способы его применения и самое главное все сами сделали на практике. Nginx может работать сам по себе, но основное предназначение – снижать нагрузку на Apache обрабатывая статику.

Домашнее задание

Воспользовавшись полученными знаниями настройте Nginx в двух режимах работы. Nginx+FastCGI и Frontend/Backend.

Модуль 14. HTTP сервер: Nginx.

 

209

 

 

 

Postfix

Postfix – один из самых распространенных MTA на данный момент. MTA – это Mail Transfer Agent, агент по доставке почты.

В этом модуле я расскажу, как настроить почтовый сервер корпоративного уровня на базе Postfix. У нас будет весь необходимый функционал, - MTA, POP3/IMAP-сервер, антивирус, антиспам, веб-интерфейс по управлению почтовым сервером и веб-интерфейс для пользователей. Классно правда ? И самое главное, что все ПО является бесплатным.

Информация в модуле будет состоять из двух частей. В первой части мы все установим и настроим а во второй я приведу описание конфигурационных файлов всех наших программ.

Установка и настройка

# yum -y remove sendmail

Postfix

Для построение почтового сервера нужно установить и настроить набор программного обеспечения.

1. Postfix – MTA который отвечает за пересылку почты на другие почтовые

сервера;

2. MySQL, именно в базе данных мы будем хранить почтовые аккаунты;

3. Dovecot, предоставляет сервисы POP3/IMAP для пользователей сервера;

4.Clamd (ClamAV Daemon), отвечает за проверку почту на наличие вирусов;

5.ClamSMTP, связывает работу Postfix и ClamAV между собой;

6. Spamassassin, отвечает за проверку почты на наличие SPAM-сообщений;

7. Postfixadmin – веб-интерфейс для управления Postfix;

8. Squirrelmail – веб-интерфейс для пользователей почтового сервера.

Настраиваем наш yum на работу с новым репозиторием – rpmforge. Репозиторий содержит около 4000 тысяч пакетов, но нам оттуда понадобится только clamsmtp, SMTP-фильтр для проверки писем на вирусы, в своей работе использующий ClamAV и Spamassassin.

# rpm -Uvh http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge- release-0.3.6-1.el5.rf.i386.rpm

210

 

Модуль 15. Postfix.