Entendendo location paths e proxy_pass do Nginx

Essa semana tive um problema um tanto complicado para resolver com o Nginx, mas acabei caindo em um texto excelente com uma explicação simples. Resolvi traduzir, assim tenho como referencia para mim e ajudo outros. O texto é simples porque espera que já se tenha um conhecimento pelo menos básico do Nginx. (reforçando que a pronuncia é EngineX)


Se você tem os seguinte blocos de configuração

location / {
  proxy_pass http://127.0.0.1:8080;
}

e

location / {
  proxy_pass http://127.0.0.1:8080/;
}

Ambos são a mesma coisa no final, quando chamamos o endereço /abc/def no nosso servidor ele vai chamar o endereço da request como http://127.0.0.1:8080/abc/def

Mas assim que precisarmos de um novo bloco para uma outra aplicação que não seja o endereço raiz como no caminho abaixo

location /app {
  proxy_pass http://localhost:8080;
}

A configuração abaixo já não é mais a mesma da configuração acim

location /app/ {
  proxy_pass http://localhost:8080/;
}

A tabela abaixo mostra as diferenças

Cenário Location proxy_pass URL path
1 /test1 http://127.0.0.1:8080 /test1/abc/test /test1/abc/test
2 /test2 http://127.0.0.1:8080/ /test2/abc/test //abc/test
3 /test3/ http://127.0.0.1:8080 /test3/abc/test /test3/abc/test
4 /test4/ http://127.0.0.1:8080/ /test4/abc/test /abc/test
5 /test5 http://127.0.0.1:8080/app1 /test5/abc/test app1/abc/test
6 /test6 http://127.0.0.1:8080/app1/ /test6/abc/test /app1//abc/test
7 /test7/ http://127.0.0.1:8080/app1 /test7/abc/test /app1abc/test
8 /test8/ http://127.0.0.1:8080/app1/ /test8/abc/test /app1/abc/test
9 / http://127.0.0.1:8080 /test9/abc/test /test9/abc/test
10 / http://127.0.0.1:8080/ /test10/abc/test /test10/abc/test
11 / http://127.0.0.1:8080/app1 /test11/abc/test /app1test11/abc/test
12 / http://127.0.0.1:8080/app2 /test12/abc/test /app2/test12/abc/test

Observe o cenário 4 em que ao ter a barra / no proxy_pass a parte da url location no bloco é removida da url e passa para a aplicação o restante após isso.

Você pode encontrar o texto original em inglês aqui.