# HG changeset patch # User Ruslan Ermilov # Date 1339679293 0 # Node ID f8652d663b62c42e2a965cfde0f669a9f198f507 # Parent 6761e05e5128662b18006ac4c3ce4dfa0dcb1ca9 Revised description of "proxy_pass". diff --git a/xml/en/docs/http/ngx_http_proxy_module.xml b/xml/en/docs/http/ngx_http_proxy_module.xml --- a/xml/en/docs/http/ngx_http_proxy_module.xml +++ b/xml/en/docs/http/ngx_http_proxy_module.xml @@ -809,18 +809,20 @@ Can be used along with the +A request URI is passed to the server as follows: + -when a location is specified using a regular expression; +If proxy_pass is specified with URI, +when passing a request to the server, part of a +normalized +request URI matching the location is replaced by a URI +specified in the directive: + +location /name/ { + proxy_pass http://127.0.0.1/remote/; +} + -if a URI is changed using the - directive -inside a proxied location, and this same configuration will be -used to process a request (break): +If proxy_pass is specified without URI, +a request URI is passed to the server in the same form +as sent by a client when processing an original request, +or the full normalized request URI is passed +when processing the changed URI: + +location /some/path/ { + proxy_pass http://127.0.0.1; +} + + +Before version 1.1.12, +if proxy_pass is specified without a URI, +an original request URI might be passed +instead of the changed URI in some cases. + + + + + + +In some cases, part of a request URI to be replaced cannot be determined: + + + +When location is specified using a regular expression. + +In this case, the directive should be specified without URI. + + + + +When URI is changed inside a proxied location using the + directive, +and this same configuration will be used to process a request +(break): location /name/ { rewrite /name/([^/]+) /users?name=$1 break; proxy_pass http://127.0.0.1; } -In these cases a URI is passed without mapping. + +In this case, a URI specified in the directive is ignored and +the full changed request URI is passed to the server. + - -It can also be specified that a request URI should be passed unchanged, -in the same form it was sent by the client, not the processed form. -During a processing - - - -two or more adjacent slashes are replaced by one: “//” — “/”; - - - -links to the current directory get removed: “/./” — “/”; - - - -links to the parent directory get removed: “/dir/../” — “/”. - - - - - - -If a URI should be passed unchanged then the server URL should be specified -without a URI in the proxy_pass directive: - -location /some/path/ { - proxy_pass http://127.0.0.1; -} - - - - -Server name, its port, and passed URI can be specified using variables: +A server name, its port and passed URI can also be specified using variables: proxy_pass http://$host$uri; -or like this: +or even like this: proxy_pass $request; diff --git a/xml/ru/docs/http/ngx_http_proxy_module.xml b/xml/ru/docs/http/ngx_http_proxy_module.xml --- a/xml/ru/docs/http/ngx_http_proxy_module.xml +++ b/xml/ru/docs/http/ngx_http_proxy_module.xml @@ -805,40 +805,80 @@ proxy_no_cache $http_pragma $http_aut limit_except -Задаёт адрес проксируемоего сервера и URI, на который -будет отображаться location. -Адрес может быть указан в виде доменного имени или адреса, и порта, например, +Задаёт протокол и адрес проксируемоего сервера, а также необязательный URI, +на который должен отображаться location. +В качестве протокола можно указать +“http” или “https”. +Адрес может быть указан в виде доменного имени или IP-адреса, +и необязательного порта: proxy_pass http://localhost:8000/uri/; -или в виде пути UNIX-сокета: +или в виде пути UNIX-сокета, который указывается после слова +“unix” и заключается в двоеточия: proxy_pass http://unix:/tmp/backend.socket:/uri/; -путь указан после слова “unix” -и заключён между двумя двоеточиями. Если доменному имени соответствует несколько адресов, то все они будут использоваться по очереди (round-robin). -И, кроме того, адрес может быть -группой серверов. +Кроме того, в качестве адреса можно указать +группу серверов. -При передаче запроса серверу часть URI, соответствующая location, -заменяется на URI, указанный в директиве proxy_pass. -Но из этого правила есть два исключения, в которых нельзя определить -заменяемый location: - +URI запроса передаётся на сервер так: + -если location задан регулярным выражением; +Если proxy_pass указана с URI, +то при передаче запроса серверу часть +нормализованного +URI запроса, соответствующая location, заменяется на URI, +указанный в директиве: + +location /name/ { + proxy_pass http://127.0.0.1/remote/; +} + -если внутри проксируемого location с помощью директивы +Если proxy_pass указана без URI, +то при обработке первоначального запроса на сервер передаётся +URI запроса в том же виде, в каком его прислал клиент, +а при обработке изменённого URI— +нормализованный URI запроса целиком: + +location /some/path/ { + proxy_pass http://127.0.0.1; +} + + +До версии 1.1.12, +если proxy_pass указана без URI, +в ряде случаев при изменении URI на сервер мог передаваться +URI первоначального запроса вместо изменённого URI. + + + + + + +В ряде случаев часть URI запроса, подлежащую замене, выделить невозможно: + + + +Если location задан регулярным выражением. + +В этом случае директиву следует указывать без URI. + + + + +Если внутри проксируемого location с помощью директивы изменяется URI, и именно с этой конфигурацией будет обрабатываться запрос (break): @@ -848,50 +888,21 @@ location /name/ { proxy_pass http://127.0.0.1; } -Для этих случаев URI передаётся без отображения. - - - + +В этом случае URI, указанный в директиве, игнорируется, и на сервер +передаётся изменённый URI запроса целиком. - - -Кроме того, можно указать, чтобы URI запроса передавался в том же виде, -в каком его прислал клиент, а не в обработанном виде. -Во время обработки - - - -два и более слэшей заменяются на один: “//” — “/”; - - -убираются ссылки на текущий каталог: “/./” — “/”; - - - -убираются ссылки на предыдущий каталог: “/dir/../” — “/”. - - -Если на сервер нужно передать URI в необработанном виде, то для этого -в директиве proxy_pass нужно указать URL сервера без URI: - -location /some/path/ { - proxy_pass http://127.0.0.1; -} - - - - Имя сервера, его порт и передаваемый URI можно также полностью задать с помощью переменных: proxy_pass http://$host$uri; -или так: +или даже так: proxy_pass $request;