Rewrite Referer in proxy_pass

Igor Sysoev is at rambler-co.ru
Mon Mar 13 21:48:28 MSK 2006


On Mon, 13 Mar 2006, Grigory Batalov wrote:

> Имеется проблема:
>
> Один CGI-скрипт проверяет значение Referer, и, если оно частично
> не совпадает с его собственным URL, перенаправляет клиента на
> некий другой "URL по умолчанию".
>
> CGI-скрипты обслуживаются сервером на другом порту (8081),
> нежели nginx (8080), запросы туда пробрасывает proxy_pass:
>
>        location /trac-cgi/ {
>                proxy_pass      http://localhost:8081/trac-cgi/;
>                proxy_redirect  default;
>                proxy_set_header        X-Real-IP       $remote_addr;
>                keepalive_timeout       0;
>        }
>
> При этом CGI-скрипт считает своим URL:
>
> http://localhost:8081/trac-cgi/trac.cgi/logger/login
>
> а в поле Referer получает вот это:
>
> http://localhost:8080/trac-cgi/trac.cgi/logger/login
>
> Нельзя ли переписать и Referer тоже каким-нибудь образом,
> поскольку proxy_redirect в этом случае не помогает?
>
> Или, может быть, есть другое простое решение?

Примерно так:

        location /trac-cgi/ {

            set  $referer  $http_referer;
            if ($http_referer ~ '^(http://localhost):8080(/.+)$') {
                set  $referer  $1:8081$2;
            }

            ...
            proxy_set_header  Referer  $referer;
            ...


Игорь Сысоев
http://sysoev.ru





More information about the nginx-ru mailing list