7

I have a location

location /pass/ {
    proxy_pass http://localhost:12345/;
}

So it is supposed to proxify urls http://example.com/pass/whatever to http://localhost:12345/whatever

The thing I don't like about it is that nginx is automatically adding slash to

http://example.com/pass

and makes it http://example.com/pass/ via 301 redirect

How can I simply avoid this behavior. I want /pass without trailing slash to go to another location. Thanks in advance!

  • I solved it with regex (/pass/(.*).../$1$is_args$args), other solutions would be appreciated – igor Dec 19 '13 at 10:58
  • Just in case it helps others finding themselves here questioning 301 redirects coming from their nginx-proxied webapps, make sure it's not the webapp doing it. That was the cause in my case, not nginx. – Jacob Wan Nov 27 '14 at 18:00
  • 3
2

As you want it to go to another location, a natural solution is to add that location

location /pass {
}

By default, nginx will look for a file called 'pass' in the web root. If you don't like this default, you may add more directives inside this new location block to achieve that.

You may also use

location = /pass {
}

such that nginx can find the match a bit faster.

  • Yeas, this is solution, but It can bloat config in some cases ;( – igor Dec 20 '13 at 9:09
2

There is no possible way is it doing that, with just the configuration snippet you've provided. A location /pass/ would never ever match a /pass without a slash after pass.

Moreover, are you sure you actually want to do what you're trying to do? If you're going to omit a redirect from /pass to /pass/, then relative paths aren't going to work.

  • 1
    the point is that location /pass/ is forcing redirect for /pass to match it as long as I think, /pass should better match location / and not /pass/ – igor Dec 20 '13 at 9:11
  • 7
    @cnst: actually it will, and it's documented as doing that. See the last paragraph of nginx.org/en/docs/http/ngx_http_core_module.html#location . What's going on is that if you include any of proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, or memcached_pass in a location with a trailing slash, it sets the 'auto_redirect' flag on the location, which triggers the redirect on this line: github.com/nginx/nginx/blob/… – bazzargh Aug 30 '14 at 12:25

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.