Quando você altera o conteúdo do URI que está sendo processado em um bloco de localização que contém uma diretiva proxy_pass, você precisa manipular Location
de reescrita do cabeçalho com proxy_redirect:
In some cases, the part of a request URI to be replaced cannot be determined:
When location is specified using a regular expression. In this case, the directive should be specified without a URI.
When the URI is changed inside a proxied location using the rewrite directive, and this same configuration will be used to process a request (break).
Mas, no seu caso, não há razão para usar uma reescrita porque o nginx já lida com isso na diretiva proxy_pass ao adicionar um prefixo de URI:
If the proxy_pass directive is specified with a URI, then when a request is passed to the server, the part of a normalized request URI matching the location is replaced by a URI specified in the directive.
Além disso, você precisa remover a diretiva proxy_redirect
para que o nginx possa reescrever Location
headers usando o prefixo URI proxy_pass como padrão e o prefixo de local como substituto.
Então, simplesmente use isso:
server {
server_name sub.domain.com;
location / {
proxy_pass http://172.17.1.10:8080/myapp/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
include /etc/nginx/proxy_params;
}
}