comparison xml/ru/docs/http/ngx_http_proxy_module.xml @ 535:f8652d663b62

Revised description of "proxy_pass".
author Ruslan Ermilov <ru@nginx.com>
date Thu, 14 Jun 2012 13:08:13 +0000
parents 5e332fafd228
children ebcb351d9eb3
comparison
equal deleted inserted replaced
534:6761e05e5128 535:f8652d663b62
803 <context>location</context> 803 <context>location</context>
804 <context>if в location</context> 804 <context>if в location</context>
805 <context>limit_except</context> 805 <context>limit_except</context>
806 806
807 <para> 807 <para>
808 Задаёт адрес проксируемоего сервера и URI, на который 808 Задаёт протокол и адрес проксируемоего сервера, а также необязательный URI,
809 будет отображаться location. 809 на который должен отображаться location.
810 Адрес может быть указан в виде доменного имени или адреса, и порта, например, 810 В качестве протокола можно указать
811 “<literal>http</literal>” или “<literal>https</literal>”.
812 Адрес может быть указан в виде доменного имени или IP-адреса,
813 и необязательного порта:
811 <example> 814 <example>
812 proxy_pass http://localhost:8000/uri/; 815 proxy_pass http://localhost:8000/uri/;
813 </example> 816 </example>
814 или в виде пути UNIX-сокета: 817 или в виде пути UNIX-сокета, который указывается после слова
818 “<literal>unix</literal>” и заключается в двоеточия:
815 <example> 819 <example>
816 proxy_pass http://unix:/tmp/backend.socket:/uri/; 820 proxy_pass http://unix:/tmp/backend.socket:/uri/;
817 </example> 821 </example>
818 путь указан после слова “<literal>unix</literal>”
819 и заключён между двумя двоеточиями.
820 </para> 822 </para>
821 823
822 <para> 824 <para>
823 Если доменному имени соответствует несколько адресов, то все они будут 825 Если доменному имени соответствует несколько адресов, то все они будут
824 использоваться по очереди (round-robin). 826 использоваться по очереди (round-robin).
825 И, кроме того, адрес может быть 827 Кроме того, в качестве адреса можно указать
826 <link doc="ngx_http_upstream_module.xml">группой серверов</link>. 828 <link doc="ngx_http_upstream_module.xml">группу серверов</link>.
827 </para> 829 </para>
828 830
829 <para> 831 <para>
830 При передаче запроса серверу часть URI, соответствующая location, 832 URI запроса передаётся на сервер так:
831 заменяется на URI, указанный в директиве <literal>proxy_pass</literal>. 833 <list type="bullet" compact="no">
832 Но из этого правила есть два исключения, в которых нельзя определить
833 заменяемый location:
834 <list type="bullet">
835 834
836 <listitem> 835 <listitem>
837 если location задан регулярным выражением; 836 Если <literal>proxy_pass</literal> указана с URI,
837 то при передаче запроса серверу часть
838 <link doc="ngx_http_core_module.xml" id="location">нормализованного</link>
839 URI запроса, соответствующая location, заменяется на URI,
840 указанный в директиве:
841 <example>
842 location /name/ {
843 proxy_pass http://127.0.0.1/remote/;
844 }
845 </example>
838 </listitem> 846 </listitem>
839 847
840 <listitem> 848 <listitem>
841 если внутри проксируемого location с помощью директивы 849 Если <literal>proxy_pass</literal> указана без URI,
850 то при обработке первоначального запроса на сервер передаётся
851 URI запроса в том же виде, в каком его прислал клиент,
852 а при обработке изменённого URI&mdash;
853 нормализованный URI запроса целиком:
854 <example>
855 location /some/path/ {
856 proxy_pass http://127.0.0.1;
857 }
858 </example>
859 <note>
860 До версии 1.1.12,
861 если <literal>proxy_pass</literal> указана без URI,
862 в ряде случаев при изменении URI на сервер мог передаваться
863 URI первоначального запроса вместо изменённого URI.
864 </note>
865 </listitem>
866 </list>
867 </para>
868
869 <para>
870 В ряде случаев часть URI запроса, подлежащую замене, выделить невозможно:
871 <list type="bullet" compact="no">
872
873 <listitem>
874 Если location задан регулярным выражением.
875 <para>
876 В этом случае директиву следует указывать без URI.
877 </para>
878 </listitem>
879
880 <listitem>
881 Если внутри проксируемого location с помощью директивы
842 <link doc="ngx_http_rewrite_module.xml" id="rewrite"/> изменяется 882 <link doc="ngx_http_rewrite_module.xml" id="rewrite"/> изменяется
843 URI, и именно с этой конфигурацией будет обрабатываться запрос 883 URI, и именно с этой конфигурацией будет обрабатываться запрос
844 (<literal>break</literal>): 884 (<literal>break</literal>):
845 <example> 885 <example>
846 location /name/ { 886 location /name/ {
847 rewrite /name/([^/]+) /users?name=$1 break; 887 rewrite /name/([^/]+) /users?name=$1 break;
848 proxy_pass http://127.0.0.1; 888 proxy_pass http://127.0.0.1;
849 } 889 }
850 </example> 890 </example>
851 Для этих случаев URI передаётся без отображения. 891 <para>
892 В этом случае URI, указанный в директиве, игнорируется, и на сервер
893 передаётся изменённый URI запроса целиком.
894 </para>
852 </listitem> 895 </listitem>
853
854 </list> 896 </list>
855 </para>
856
857 <para>
858 Кроме того, можно указать, чтобы URI запроса передавался в том же виде,
859 в каком его прислал клиент, а не в обработанном виде.
860 Во время обработки
861 <list type="bullet">
862
863 <listitem>
864 два и более слэшей заменяются на один: “//” — “/”;
865 </listitem>
866
867 <listitem>
868 убираются ссылки на текущий каталог: “/./” — “/”;
869 </listitem>
870
871 <listitem>
872 убираются ссылки на предыдущий каталог: “/dir/../” — “/”.
873 </listitem>
874
875 </list>
876 </para>
877
878 <para>
879 Если на сервер нужно передать URI в необработанном виде, то для этого
880 в директиве <literal>proxy_pass</literal> нужно указать URL сервера без URI:
881 <example>
882 location /some/path/ {
883 proxy_pass http://127.0.0.1;
884 }
885 </example>
886 </para> 897 </para>
887 898
888 <para> 899 <para>
889 Имя сервера, его порт и передаваемый URI можно также полностью задать 900 Имя сервера, его порт и передаваемый URI можно также полностью задать
890 с помощью переменных: 901 с помощью переменных:
891 <example> 902 <example>
892 proxy_pass http://$host$uri; 903 proxy_pass http://$host$uri;
893 </example> 904 </example>
894 или так: 905 или даже так:
895 <example> 906 <example>
896 proxy_pass $request; 907 proxy_pass $request;
897 </example> 908 </example>
898 </para> 909 </para>
899 910