nginx 'proxy_pass' cannot have URI part in location?

前端 未结 3 1251
清酒与你
清酒与你 2020-12-08 07:26

I have a location block as

location @test{
    proxy_pass http://localhost:5000/1;
}

but nginx complains that \"proxy_p

相关标签:
3条回答
  • 2020-12-08 07:56

    Try omitting the "/" (URI part) and check.

    location @test{
        proxy_pass http://localhost:5000;
    }
    
    0 讨论(0)
  • 2020-12-08 07:57

    Technically just adding the URI should work, because it's documented here and it says that it should work, so

    location @test{
        proxy_pass http://localhost:5000/1/; # with a trailing slash
    }
    

    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 to localhost:5000/1, we pass /1/my/uri to localhost:5000,

    That's what my rewrite did

    rewrite ^ /1$1
    

    Meaning rewrite the whole URL, prepend it with /1 then add the remaining, the whole block becomes

    location @test{
        rewrite ^ /1$1;
        proxy_pass http://localhost:5000;
    }
    

    Note: @Fleshgrinder provided an answer explaining why the first method didn't work.

    0 讨论(0)
  • 2020-12-08 08:12

    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 your proxy_pass directive in the following cases:

    1. Regular Expression Locations
    2. Named Locations
    3. if Blocks

    How 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.

    0 讨论(0)
提交回复
热议问题