comparison xml/ru/docs/http/ngx_http_proxy_module.xml @ 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 bfe3eff81d04
children c78b2d6fe261
comparison
equal deleted inserted replaced
237:48a5c2083270 238:e33fc8541217
526 526
527 </directive> 527 </directive>
528 528
529 529
530 <directive name="proxy_redirect"> 530 <directive name="proxy_redirect">
531 <syntax><value>[default|off|редирект замена]</value> 531 <syntax>
532 <value>default</value> |
533 <value>off</value> |
534 <argument>редирект замена</argument>
532 </syntax> 535 </syntax>
533 <default>default</default> 536 <default>default</default>
534 <context>http, server, location</context> 537 <context>http</context>
535 538 <context>server</context>
536 <para> 539 <context>location</context>
537 Директива задаёт текст, который нужно изменить в строках заголовка "Location" 540
538 и "Refresh" в ответе проксируемого сервера. Предположим, проксируемый сервер 541 <para>
539 вернул строку "Location: http://localhost:8000/two/some/uri/". Директива 542 Директива задаёт текст, который нужно изменить в строках заголовка
540 <example> 543 <header>Location</header> и <header>Refresh</header> в ответе
541 proxy_redirect http://localhost:8000/two/ http://frontend/one/; 544 проксируемого сервера.
542 </example> 545 Предположим, проксируемый сервер вернул строку
543 перепишет эту строку в виде "Location: http://frontend/one/some/uri/". 546 <header>Location: http://localhost:8000/two/some/uri/</header>.
547 Директива
548 <example>
549 proxy_redirect http://localhost:8000/two/ http://frontend/one/;
550 </example>
551 перепишет эту строку в виде
552 <header>Location: http://frontend/one/some/uri/</header>.
544 </para> 553 </para>
545 554
546 <para> 555 <para>
547 В заменяемой строке можно не указывать имя сервера: 556 В заменяемой строке можно не указывать имя сервера:
548 <example> 557 <example>
549 proxy_redirect http://localhost:8000/two/ /; 558 proxy_redirect http://localhost:8000/two/ /;
550 </example> 559 </example>
551 тогда будет поставлено основное имя сервера и порт, если он отличен от 80. 560 тогда будет подставлено основное имя сервера и порт, если он отличен от 80.
552 </para> 561 </para>
553 562
554 <para> 563 <para>
555 Изменение по умолчанию, задаваемое параметром "default", использует 564 Изменение по умолчанию, задаваемое значением <value>default</value>, использует
556 параметры директив location и proxy_pass. 565 параметры директив <link doc="ngx_http_core_module.xml" id="location"/> и
566 <link id="proxy_pass"/>.
557 Поэтому две нижеприведённые конфигурации одинаковы: 567 Поэтому две нижеприведённые конфигурации одинаковы:
558 <example> 568 <example>
559 location /one/ { 569 location /one/ {
560 proxy_pass http://upstream:port/two/; 570 proxy_pass http://upstream:port/two/;
561 proxy_redirect default; 571 proxy_redirect default;
562 </example> 572 </example>
563 573
564 <example> 574 <example>
565 location /one/ { 575 location /one/ {
566 proxy_pass http://upstream:port/two/; 576 proxy_pass http://upstream:port/two/;
567 proxy_redirect http://upstream:port/two/ /one/; 577 proxy_redirect http://upstream:port/two/ /one/;
568 </example> 578 </example>
579 Значение <value>default</value> недопустимо, если в <link id="proxy_pass"/>
580 используются переменные.
569 </para> 581 </para>
570 582
571 <para> 583 <para>
572 В заменяемой строке можно использовать переменные: 584 В заменяемой строке можно использовать переменные:
573 <example> 585 <example>
574 proxy_redirect http://localhost:8000/ http://$host:$server_port/; 586 proxy_redirect http://localhost:8000/ http://$host:$server_port/;
587 </example>
588 </para>
589
590 <para>
591 В редиректе тоже можно использовать (1.1.11) переменные:
592 <example>
593 proxy_redirect http://$proxy_host:8000/ /;
594 </example>
595 </para>
596
597 <para>
598 Директиву также можно задать (1.1.11) при помощи регулярных выражений.
599 При этом <argument>редирект</argument> должен начинаться либо с символа
600 “<code>~</code>”, если при сравнении следует учитывать регистр символов,
601 либо с символов “<code>~*</code>”, если регистр символов учитывать не нужно.
602 Регулярное выражение может содержать именованные и позиционные выделения,
603 а <argument>замена</argument> на них ссылаться:
604 <example>
605 proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
606 proxy_redirect ~*/user/([^/]+)/(.+)$ http://$1.example.com/$2;
575 </example> 607 </example>
576 </para> 608 </para>
577 609
578 <para> 610 <para>
579 Директив может быть несколько: 611 Директив может быть несколько:
580 <example> 612 <example>
581 proxy_redirect default; 613 proxy_redirect default;
582 proxy_redirect http://localhost:8000/ /; 614 proxy_redirect http://localhost:8000/ /;
583 proxy_redirect http://www.example.com/ /; 615 proxy_redirect http://www.example.com/ /;
584 </example> 616 </example>
585 </para> 617 </para>
586 618
587 <para> 619 <para>
588 Параметр "off" запрещает все директивы proxy_redirect на данном уровне: 620 Значение <value>off</value> запрещает все директивы <code>proxy_redirect</code>
589 <example> 621 на данном уровне:
590 proxy_redirect off; 622 <example>
591 proxy_redirect default; 623 proxy_redirect off;
592 proxy_redirect http://localhost:8000/ /; 624 proxy_redirect default;
593 proxy_redirect http://www.example.com/ /; 625 proxy_redirect http://localhost:8000/ /;
626 proxy_redirect http://www.example.com/ /;
594 </example> 627 </example>
595 </para> 628 </para>
596 629
597 <para> 630 <para>
598 С помощью этой директивы можно также добавлять имя хоста к относительным 631 С помощью этой директивы можно также добавлять имя хоста к относительным
599 редиректам, выдаваемым проксируемым сервером: 632 редиректам, выдаваемым проксируемым сервером:
600 <example> 633 <example>
601 proxy_redirect / /; 634 proxy_redirect / /;
602 </example> 635 </example>
603 </para> 636 </para>
604 637
605 </directive> 638 </directive>
606 639