Trailing Slash Redirect Loop Help
Francis Daly
francis at daoine.org
Wed Oct 9 21:33:08 UTC 2019
On Wed, Oct 09, 2019 at 01:54:58PM -0400, Alex Med wrote:
Hi there,
> Here is the full configuration with reverse proxy, pagespeed,and
> lowercasing. It all
> works well, but now that I incorporated removing the trailing slash it
> brought up new
> issues: https://pastebin.com/keQ239D4. Let me know if you prefer that I
> post the configurations
> in the post.
Thanks for this.
Some of this configuration is not "stock nginx", but I guess that the
extra modules do not affect the issue here.
It would be convenient for history here, to have the config here; but
the relevant part is basically the part shown in the previous mail.
Most requests eventually use a proxy_pass to an upstream server.
> This is with the "evil if" enable, I get the following response when it is a
> directory such as the blog directory:
I suspect that there may be an interpretation issue here.
When I read "the blog directory", I understand something along the lines
of "/usr/local/nginx/html/blog/index.html exists as a file that nginx
can see".
I now suspect that you intend something like "the upstream server
considers it to be a directory".
> curl -i http://example.com/blog/
> HTTP/1.1 301 Moved Permanently
> Server: nginx
> Date: Wed, 09 Oct 2019 15:06:04 GMT
> Content-Type: text/html
> Content-Length: 178
> Location: http://example.com/blog
> Connection: keep-alive
That's from nginx; your config says "if the request ends in / and does
not represent a directory on this filesystem, redirect to no-slash".
> curl -i http://example.com/blog
> HTTP/1.1 301
> Server: nginx
> Date: Wed, 09 Oct 2019 15:06:48 GMT
> Content-Length: 0
> Connection: keep-alive
> Location: /blog/
> Cache-Control: s-maxage=10
That's from your upstream server. Presumably it has decided that "/blog
refers to a directory as far as it is concerned; please request /blog/
instead".
And there is your infinite loop.
So I guess the next question is: what response do you want from nginx?
In this specific case: when you request /blog/, how would you like nginx
to handle that request?
And in your answer, also consider: how might nginx possibly be able
to tell that you want the request handled differently from a request
for /file/?
> >>Does the proxy_pass upstream
> >>share the same filesystem as this nginx?
> No, they do not share the same file system.
"if -d" looks on the filesystem. try_files looks on the filesystem.
If the filesystem does not contain the information on whether "this"
thing is a directory or not, looking on the filesystem will not be able
to give a useful answer.
So, what specific problem are you trying to solve?
If you remove the "remove the slash" configuration from nginx, is there
one request that gets a response that you do not want?
Perhaps fixing the handling of *that* request will get you to a config
that does what you want.
f
--
Francis Daly francis at daoine.org
More information about the nginx
mailing list