Mercurial > hg > nginx-site
changeset 238:e33fc8541217
- "proxy_redirect" supports variables in the first parameter,
- "proxy_redirect" supports regular expressions,
- "proxy_redirect default" doesn't work if "proxy_pass" references variables.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 13 Dec 2011 20:23:07 +0000 |
parents | 48a5c2083270 |
children | fe72da550150 |
files | xml/ru/docs/http/ngx_http_proxy_module.xml |
diffstat | 1 files changed, 58 insertions(+), 25 deletions(-) [+] |
line wrap: on
line diff
--- a/xml/ru/docs/http/ngx_http_proxy_module.xml +++ b/xml/ru/docs/http/ngx_http_proxy_module.xml @@ -528,69 +528,102 @@ location /some/path/ { <directive name="proxy_redirect"> -<syntax><value>[default|off|редирект замена]</value> +<syntax> + <value>default</value> | + <value>off</value> | + <argument>редирект замена</argument> </syntax> <default>default</default> -<context>http, server, location</context> +<context>http</context> +<context>server</context> +<context>location</context> <para> -Директива задаёт текст, который нужно изменить в строках заголовка "Location" -и "Refresh" в ответе проксируемого сервера. Предположим, проксируемый сервер -вернул строку "Location: http://localhost:8000/two/some/uri/". Директива +Директива задаёт текст, который нужно изменить в строках заголовка +<header>Location</header> и <header>Refresh</header> в ответе +проксируемого сервера. +Предположим, проксируемый сервер вернул строку +<header>Location: http://localhost:8000/two/some/uri/</header>. +Директива <example> - proxy_redirect http://localhost:8000/two/ http://frontend/one/; + proxy_redirect http://localhost:8000/two/ http://frontend/one/; </example> -перепишет эту строку в виде "Location: http://frontend/one/some/uri/". +перепишет эту строку в виде +<header>Location: http://frontend/one/some/uri/</header>. </para> <para> В заменяемой строке можно не указывать имя сервера: <example> - proxy_redirect http://localhost:8000/two/ /; + proxy_redirect http://localhost:8000/two/ /; </example> -тогда будет поставлено основное имя сервера и порт, если он отличен от 80. +тогда будет подставлено основное имя сервера и порт, если он отличен от 80. </para> <para> -Изменение по умолчанию, задаваемое параметром "default", использует -параметры директив location и proxy_pass. +Изменение по умолчанию, задаваемое значением <value>default</value>, использует +параметры директив <link doc="ngx_http_core_module.xml" id="location"/> и +<link id="proxy_pass"/>. Поэтому две нижеприведённые конфигурации одинаковы: <example> location /one/ { - proxy_pass http://upstream:port/two/; - proxy_redirect default; + proxy_pass http://upstream:port/two/; + proxy_redirect default; </example> <example> location /one/ { - proxy_pass http://upstream:port/two/; - proxy_redirect http://upstream:port/two/ /one/; + proxy_pass http://upstream:port/two/; + proxy_redirect http://upstream:port/two/ /one/; </example> +Значение <value>default</value> недопустимо, если в <link id="proxy_pass"/> +используются переменные. </para> <para> В заменяемой строке можно использовать переменные: <example> - proxy_redirect http://localhost:8000/ http://$host:$server_port/; + proxy_redirect http://localhost:8000/ http://$host:$server_port/; +</example> +</para> + +<para> +В редиректе тоже можно использовать (1.1.11) переменные: +<example> + proxy_redirect http://$proxy_host:8000/ /; +</example> +</para> + +<para> +Директиву также можно задать (1.1.11) при помощи регулярных выражений. +При этом <argument>редирект</argument> должен начинаться либо с символа +“<code>~</code>”, если при сравнении следует учитывать регистр символов, +либо с символов “<code>~*</code>”, если регистр символов учитывать не нужно. +Регулярное выражение может содержать именованные и позиционные выделения, +а <argument>замена</argument> на них ссылаться: +<example> + proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2; + proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2; </example> </para> <para> Директив может быть несколько: <example> - proxy_redirect default; - proxy_redirect http://localhost:8000/ /; - proxy_redirect http://www.example.com/ /; + proxy_redirect default; + proxy_redirect http://localhost:8000/ /; + proxy_redirect http://www.example.com/ /; </example> </para> <para> -Параметр "off" запрещает все директивы proxy_redirect на данном уровне: +Значение <value>off</value> запрещает все директивы <code>proxy_redirect</code> +на данном уровне: <example> - proxy_redirect off; - proxy_redirect default; - proxy_redirect http://localhost:8000/ /; - proxy_redirect http://www.example.com/ /; + proxy_redirect off; + proxy_redirect default; + proxy_redirect http://localhost:8000/ /; + proxy_redirect http://www.example.com/ /; </example> </para> @@ -598,7 +631,7 @@ location /one/ { С помощью этой директивы можно также добавлять имя хоста к относительным редиректам, выдаваемым проксируемым сервером: <example> - proxy_redirect / /; + proxy_redirect / /; </example> </para>