# HG changeset patch # User Ruslan Ermilov # Date 1337863144 0 # Node ID ef11546f75ee8a8b06b613709cfee9b5168d6b51 # Parent 3481a91d46aba5fbad7e64c213542764cd179dfb Translated "request_processing" into Russian, removed "virtual_hosts" (which was a partly obsolete subset of "request_processing"), added Russian introduction. diff -r 3481a91d46ab -r ef11546f75ee xml/en/docs/http/ngx_http_core_module.xml --- a/xml/en/docs/http/ngx_http_core_module.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/en/docs/http/ngx_http_core_module.xml Thu May 24 12:39:04 2012 +0000 @@ -2059,9 +2059,8 @@ Instead, the directives describe all addresses and ports that should accept connections for a server, and the directive lists all server names. -An example configuration is provided in the - -Setting Up Virtual Servers document. +Example configurations are provided in the +“” document. diff -r 3481a91d46ab -r ef11546f75ee xml/en/index.xml --- a/xml/en/index.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/en/index.xml Thu May 24 12:39:04 2012 +0000 @@ -94,7 +94,8 @@ -Name-based and IP-based virtual servers; +Name-based and IP-based +virtual servers; diff -r 3481a91d46ab -r ef11546f75ee xml/menu.xml --- a/xml/menu.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/menu.xml Thu May 24 12:39:04 2012 +0000 @@ -116,7 +116,7 @@ безопасность pgp ключи документация - введение + введение howto faq trac diff -r 3481a91d46ab -r ef11546f75ee xml/ru/GNUmakefile --- a/xml/ru/GNUmakefile Thu May 24 12:24:25 2012 +0000 +++ b/xml/ru/GNUmakefile Thu May 24 12:39:04 2012 +0000 @@ -1,6 +1,7 @@ DOC_LANG = ru DOCS = \ + introduction \ howto \ faq \ install \ @@ -9,7 +10,6 @@ syntax \ example \ switches \ - virtual_hosts \ control \ hash \ dirindex \ @@ -17,6 +17,12 @@ DOCS_XML = $(foreach name, $(DOCS), xml/$(DOC_LANG)/docs/$(name).xml) DOCS_HTML = $(foreach name, $(DOCS), $(OUT)/$(DOC_LANG)/docs/$(name).html) +INTRO = \ + http/request_processing \ + +INTRO_XML = $(foreach name, $(INTRO), xml/$(DOC_LANG)/docs/$(name).xml) +INTRO_HTML = $(foreach name, $(INTRO), $(OUT)/$(DOC_LANG)/docs/$(name).html) + HOWTO = \ debugging_log \ @@ -81,6 +87,7 @@ $(OUT)/$(DOC_LANG)/docs/index.html \ $(DOCS_HTML) \ $(REFS_HTML) \ + $(INTRO_HTML) \ $(HOWTO_HTML) \ $(FAQ_HTML) \ @@ -103,6 +110,9 @@ xslt/dirindex.xslt - | \ sed 's;xml/[^/]*/docs/;;g' > $@ +$(OUT)/$(DOC_LANG)/docs/introduction.html: \ + $(INTRO_XML) \ + $(OUT)/$(DOC_LANG)/docs/howto.html: \ $(HOWTO_XML) \ diff -r 3481a91d46ab -r ef11546f75ee xml/ru/docs/http/ngx_http_core_module.xml --- a/xml/ru/docs/http/ngx_http_core_module.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/ru/docs/http/ngx_http_core_module.xml Thu May 24 12:39:04 2012 +0000 @@ -2044,9 +2044,8 @@ Вместо этого директивами описываются все адреса и порты, на которых нужно принимать соединения для этого сервера, а в директиве указываются все имена серверов. -Пример конфигурации описан в документе по - -настройке виртуальных серверов. +Примеры конфигураций описаны в документе +“”. diff -r 3481a91d46ab -r ef11546f75ee xml/ru/docs/http/request_processing.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/http/request_processing.xml Thu May 24 12:39:04 2012 +0000 @@ -0,0 +1,297 @@ + + +
+ +
+ + +nginx вначале решает, какой из серверов должен обработать запрос. +Рассмотрим простую конфигурацию, +где все три виртуальных сервера слушают на порту *:80: + +server { + listen 80; + server_name example.org www.example.org; + ... +} + +server { + listen 80; + server_name example.net www.example.net; + ... +} + +server { + listen 80; + server_name example.com www.example.com; + ... +} + + + + + +В этой конфигурации, чтобы определить, какому серверу следует направить +запрос, nginx проверяет только поле
Host
заголовка запроса. +Если его значение не соответствует ни одному из имён серверов +или в заголовке запроса нет этого поля вовсе, +nginx направит запрос в сервер по умолчанию для этого порта. +В вышеприведённой конфигурации сервером по умолчанию будет первый сервер, +что соответствует стандартному поведению nginx по умолчанию. +Сервер по умолчанию можно задать явно с помощью параметра +default_server в директиве +: + +server { + listen 80 default_server; + server_name example.net www.example.net; + ... +} + + + +Параметр default_server появился в +версии 0.8.21. +В более ранних версиях вместо него следует использовать параметр +default. + +Следует иметь в виду, что сервер по умолчанию является свойством +слушающего порта, а не имени сервера. +Подробнее это обсуждается ниже. +
+ +
+ + +
+ + +Если запросы без поля
Host
в заголовке не должны +обрабатываться, можно определить сервер, который будет их отклонять: + +server { + listen 80; + server_name ""; + return 444; +} + +Здесь в качестве имени сервера указана пустая строка, которая +соответствует запросам без поля
Host
в заголовке, +и возвращается специальный для nginx код 444, который закрывает +соединение. + +Начиная с версии 0.8.48 настройка server_name "" +является стандартной и может явно не указываться. +В более ранних версиях в качестве стандартного имени сервера +выступало имя машины (hostname). + +
+ +
+ + +
+ + +Рассмотрим более сложную конфигурацию, +в которой некоторые виртуальные серверы слушают на разных адресах: + +server { + listen 192.168.1.1:80; + server_name example.org www.example.org; + ... +} + +server { + listen 192.168.1.1:80; + server_name example.net www.example.net; + ... +} + +server { + listen 192.168.1.2:80; + server_name example.com www.example.com; + ... +} + +В этой конфигурации nginx вначале сопоставляет IP-адрес и порт +запроса с директивами + +в блоках +. +Затем он сопоставляет значение поля
Host
+заголовка запроса с директивами + +в блоках +, +которые соответствуют IP-адресу и порту. +Если имя сервера не найдено, запрос будет обработан в +сервере по умолчанию. +Например, запрос www.example.com, пришедший на порт +192.168.1.1:80, будет обработан сервером по умолчанию для порта +192.168.1.1:80, т.е. первым сервером, т.к. для этого порта +www.example.com не указан в списке имён серверов. +
+ + +Как уже говорилось, сервер по умолчанию является свойством слушающего порта, +поэтому у разных портов могут быть определены свои серверы по умолчанию: + +server { + listen 192.168.1.1:80; + server_name example.org www.example.org; + ... +} + +server { + listen 192.168.1.1:80 default_server; + server_name example.net www.example.net; + ... +} + +server { + listen 192.168.1.2:80 default_server; + server_name example.com www.example.com; + ... +} + + + + +
+ + +
+ + +Теперь посмотрим на то, как nginx выбирает location +для обработки запроса на примере обычного простого PHP-сайта: + +server { + listen 80; + server_name example.org www.example.org; + root /data/www; + + location / { + index index.html index.php; + } + + location ~* \.(gif|jpg|png)$ { + expires 30d; + } + + location ~ \.php$ { + fastcgi_pass localhost:9000; + fastcgi_param SCRIPT_FILENAME + $document_root$fastcgi_script_name; + include fastcgi_params; + } +} + + + + + +nginx вначале ищет среди всех префиксных location’ов, заданных строками, +максимально совпадающий. +В вышеприведённой конфигурации +указан только один префиксный location “/”, и поскольку +он подходит под любой запрос, он и будет использован, если других +совпадений не будет найдено. +Затем nginx проверяет location’ы, заданные регулярными выражениями, в +порядке их следования в конфигурационном файле. +При первом же совпадении поиск прекращается и nginx использует +совпавший location. +Если запросу не соответствует ни одно из регулярных выражений, +nginx использует максимально совпавший префиксный location, +найденный ранее. + + + +Следует иметь в виду, что location’ы всех типов сопоставляются только с +URI-частью строки запроса без аргументов. +Так делается потому, что аргументы в строке запроса могут быть +заданы различными способами, например: + +/index.php?user=john&page=1 +/index.php?page=1&user=john + +Кроме того, в строке запроса можно запросить что угодно: + +/index.php?page=1&something+else&user=john + + + + + +Теперь посмотрим, как бы обрабатывались запросы +в вышеприведённой конфигурации: + + + +Запросу “/logo.gif” во-первых соответствует префиксный +location “/”, а во-вторых—регулярное выражение +“\.(gif|jpg|png)$”, +поэтому он обрабатывается location’ом регулярного выражения. +Согласно директиве “root /data/www” запрос +отображается в файл /data/www/logo.gif, который +и посылается клиенту. + + + +Запросу “/index.php” также во-первых соответствует префиксный +location “/”, а во-вторых—регулярное выражение +“\.(php)$”. +Следовательно, он обрабатывается location’ом регулярного выражения +и запрос передаётся FastCGI-серверу, слушающему на localhost:9000. +Директива + +устанавливает FastCGI-параметр +SCRIPT_FILENAME в “/data/www/index.php”, +и сервер FastCGI выполняет указанный файл. +Переменная $document_root равна +значению директивы +, +а переменная $fastcgi_script_name равна +URI запроса, т.е. “/index.php”. + + + +Запросу “/about.html” соответствует только префиксный +location “/”, поэтому запрос обрабатывается в нём. +Согласно директиве “root /data/www” запрос +отображается в файл /data/www/about.html, который +и посылается клиенту. + + + +Обработка запроса “/” более сложная. +Ему соответствует только префиксный location “/”, +поэтому запрос обрабатывается в нём. +Затем директива + +проверяет существование индексных файлов согласно своих параметров +и директиве “root /data/www”. +Если файл /data/www/index.html не существует, +а файл /data/www/index.php существует, то +директива делает внутреннее перенаправление на “/index.php” +и nginx снова сопоставляет его с location’ами, +как если бы такой запрос был послан клиентом. +Как мы видели ранее, перенаправленный запрос будет в конечном итоге +обработан сервером FastCGI. + + + + + + +
+ +
diff -r 3481a91d46ab -r ef11546f75ee xml/ru/docs/index.xml --- a/xml/ru/docs/index.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/ru/docs/index.xml Thu May 24 12:39:04 2012 +0000 @@ -10,14 +10,10 @@ - - @@ -57,10 +53,6 @@
- - - - diff -r 3481a91d46ab -r ef11546f75ee xml/ru/docs/introduction.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/xml/ru/docs/introduction.xml Thu May 24 12:39:04 2012 +0000 @@ -0,0 +1,34 @@ + + +
+ + +
+ + + + + + + + + + + + + +
+ +
diff -r 3481a91d46ab -r ef11546f75ee xml/ru/docs/virtual_hosts.xml --- a/xml/ru/docs/virtual_hosts.xml Thu May 24 12:24:25 2012 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ - - -
- -
- - -Настраивать виртуальные сервера очень просто. В каждом сервере нужно описать -все адреса и порты, на которых нужно принимать соединения для этого сервера, -и все имена серверов. Рассмотрим следующую конфигурацию: - -http { - - server { - listen 192.168.10.1; - listen 192.168.10.1:8000; - - server_name one.example.com www.one.example.com; - - ... - } - - server { - listen 192.168.10.1; - listen 192.168.10.2:8000; - listen 9000; - - server_name two.example.com www.two.example.com - three.example.com www.three.example.com; - - ... - } - - server { - listen 9000; - - server_name four.example.com www.four.example.com; - - ... - } - -} - - - - -При такой настройке запрос, пришедший на 192.168.10.1:80 с заголовком -"Host: www.three.example.com", будет обслужен вторым сервером. -Если в запросе нет заголовка "Host" или же в нём указано имя, неописанное -ни в одном сервере, слушающем на адресе и порту, на которые пришёл запрос, -то запрос будет обслужен сервером, у которого первым описаны эти адрес и порт. -Например, все запросы без заголовка "Host", пришедшие на 9000 порт, -будут обслужены вторым сервером (two.example.com). -То же самое произойдёт и с запросом с заголовком "Host: www.one.example.com", -пришедшим на 9000 порт. -Для гибкой настройки серверов по умолчанию можно использовать параметр -default в директиве listen. - - -
- -
diff -r 3481a91d46ab -r ef11546f75ee xml/ru/index.xml --- a/xml/ru/index.xml Thu May 24 12:24:25 2012 +0000 +++ b/xml/ru/index.xml Thu May 24 12:39:04 2012 +0000 @@ -97,7 +97,7 @@ -Виртуальные серверы, +Виртуальные серверы, определяемые по IP-адресу и имени;