Mercurial > hg > nginx-site
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— | |
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 |