nginx 'proxy pass' не может иметь URI-часть в местоположении?

у меня есть location блок

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

но nginx жалуется, что "proxy_pass cannot have URI part in location given by regular expression..." кто-нибудь знает, что может быть неправильно?

Я пытаюсь запросить localhost:5000/1, когда загрузка завершена:

location /upload_attachment {
    upload_pass @test;
    upload_store /tmp;
    ...
}

3 ответов


технически просто добавление URI должно работать, потому что это документы и он говорит, что он должен работать, так

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

должно было сработать отлично, но так как вы сказали, что это не так, я предложил другой путь, трюк в том, что вместо прохождения /my/uri to localhost:5000/1, мы проходим /1/my/uri to localhost:5000,

вот что сделал мой переписчик

rewrite ^ /1

значение переписать весь URL, добавить его с /1 затем добавьте остальные, весь блок становится

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

Примечание: @Fleshgrinder ответ объясняя, почему первый метод не работает.


что на самом деле здесь происходит?

nginx не может обработать желаемую часть URI в proxy_pass директива, потому что вы находитесь в именованном местоположении (отсюда сообщение об ошибке). Это потому что nginx построено в модульном способе и каждый блок конфигурации прочитан в различных этапах различными модулями. Поэтому просто помните, что вы не можете иметь URI в своем


попробуйте опустить " / " (часть URI) и проверьте.

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