Forum: NGINX nginx usptream 302 redirect

51a152561de8a5ea3adf3e0c92c551cd?d=identicon&s=25 Anatoli Marinov (Guest)
on 2013-10-04 16:34
(Received via mailing list)
Hello,
Is there an easy way to configure nginx upstream to follow 302 instead
of
send them to the browser?

I tried with this config:

http {
    proxy_intercept_errors on;

    proxy_cache_path /home/toli/nginx/run/cache keys_zone=zone_c1:256m
inactive=5d max_size=30g;

    upstream up_servers {
        server 127.0.1.1:8081;
    }

    server {
        listen 127.0.0.1:8080;

        location / {
            proxy_cache zone_c1;
            proxy_pass http://127.0.1.1:8081;
            proxy_temp_path tmp ;

            error_page 301 302 307 @redir;
        }

        location @redir {
            proxy_cache zone_c1;
            proxy_pass $upstream_http_location;
            proxy_temp_path tmp ;
        }
    }
}

Unfortunately it do not work. I receive "500: Internal Server Error."
and in the logs I have [invalid URL prefix in ""]

From dev mail list Maxim advised me to backup $upstream_http_location in
other variable and I did it but the result was the same - 500 internal
server error. The config after the fix is:


http {
    proxy_intercept_errors on;

    proxy_cache_path /home/toli/nginx/run/cache keys_zone=zone_c1:256m
inactive=5d max_size=30g;

    upstream up_servers {
        server 127.0.1.1:8081;
    }

    server {
        listen 127.0.0.1:8080;

        location / {
            proxy_cache zone_c1;
            proxy_pass http://127.0.1.1:8081;
            proxy_temp_path tmp ;
            set $foo $upstream_http_location;
            error_page 301 302 307 @redir;
        }

        location @redir {
            proxy_cache zone_c1;
            proxy_pass $foo;
            proxy_temp_path tmp ;
        }
    }
}

Do you have any idea how this could be achieved.
A8108a0961c6087c43cda32c8616dcba?d=identicon&s=25 Maxim Dounin (Guest)
on 2013-10-04 17:14
(Received via mailing list)
Hello!

On Fri, Oct 04, 2013 at 05:33:57PM +0300, Anatoli Marinov wrote:

[...]

> From dev mail list Maxim advised me to backup $upstream_http_location in
> other variable and I did it but the result was the same - 500 internal
> server error. The config after the fix is:

[...]

>             proxy_pass $foo;
>             proxy_temp_path tmp ;
>         }

You need "set ... $upstream_http_location" to be executed after a
request to an upstream was done, so you need in location @redir,
not in location /.

--
Maxim Dounin
http://nginx.org/en/donation.html
B34ac0a05543759b97b03478b0b73792?d=identicon&s=25 Mingcai SHEN (archsh)
on 2015-03-19 02:44
Hello,

Very sorry to reply on this thread again.

I have the same requirement, but I still can not get nginx to follow the
302 redirect as I want.

My configuration:


upstream backend {
        server 10.255.199.60:1220;
}


server {
        listen       1220;
        server_name  localhost;

        location / {
                proxy_pass http://backend;
                error_page 301 302 307 @redir;
                #set $foo $upstream_http_location;
        }

        location @redir {
                set $foo $upstream_http_location;
                proxy_pass $foo;
        }

    }

And when I use curl to test , I got:

# curl -v
http://101.36.99.131:1220/vds48/export/data/videos...
* About to connect() to 101.36.99.131 port 1220 (#0)
*   Trying 101.36.99.131... connected
* Connected to 101.36.99.131 (101.36.99.131) port 1220 (#0)
> GET /vds48/export/data/videos_vod/v16/videos/0/00092/791/2/2.m3u8 HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.13.6.0
zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: 101.36.99.131:1220
> Accept: */*
>
< HTTP/1.1 302 Found
< Server: nginx/1.4.4
< Date: Thu, 19 Mar 2015 01:34:15 GMT
< Content-Length: 0
< Connection: keep-alive
< Cache-Control: no-cache
< Location:
http://10.255.199.43:1220/vds48/export/data/videos...
<
* Connection #0 to host 101.36.99.131 left intact
* Closing connection #0


What's the problem?
Thanks.
-
MC



Maxim Dounin wrote in post #1123508:
> Hello!
>
> On Fri, Oct 04, 2013 at 05:33:57PM +0300, Anatoli Marinov wrote:
>
> [...]
>
>> From dev mail list Maxim advised me to backup $upstream_http_location in
>> other variable and I did it but the result was the same - 500 internal
>> server error. The config after the fix is:
>
> [...]
>
>>             proxy_pass $foo;
>>             proxy_temp_path tmp ;
>>         }
>
> You need "set ... $upstream_http_location" to be executed after a
> request to an upstream was done, so you need in location @redir,
> not in location /.
>
> --
> Maxim Dounin
> http://nginx.org/en/donation.html
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.