I have a location
block as
location @test{
proxy_pass http://localhost:5000/1;
}
but nginx complains that "proxy_pass cannot have URI part in location given by regular expression..."
Does anyone know what might be wrong?
I'm trying to query localhost:5000/1 when an upload is complete:
location /upload_attachment {
upload_pass @test;
upload_store /tmp;
...
}
Try omitting the "/" (URI part) and check.
Technically just adding the URI should work, because it's documented here and it says that it should work, so
Should have worked fine, but since you said it didn't I suggested the other way around, the trick is that instead of passing
/my/uri
tolocalhost:5000/1
, we pass/1/my/uri
tolocalhost:5000
,That's what my rewrite did
Meaning rewrite the whole URL, prepend it with
/1
then add the remaining, the whole block becomesNote: @Fleshgrinder provided an answer explaining why the first method didn't work.
What's actually happening here?
nginx cannot process your desired URI part in the
proxy_pass
directive because you're within a named location (hence the error message). This is because nginx is built in a modular fashion and each configuration block is read in various stages by the various modules. So just remember that you cannot have a URI within yourproxy_pass
directive in the following cases:if
BlocksHow could we solve this problem?
Mohammad AbuShady explained how to do a rewrite and pass the requested URI to the proxy server. I just wanted to clarify the reason.