Из документации proxy_pass :
Особым случаем является использование переменных в операторе proxy_pass: запрошенный URL-адрес не используется, и вы несете полную ответственность за создание целевого URL-адреса самостоятельно.
Поскольку вы используете в качестве цели $ 1, nginx полагается на то, что вы точно скажете ему, что передать. Вы можете исправить это двумя способами. Во-первых, удаление начала uri с помощью proxy_pass тривиально:
location /service/ {
# Note the trailing slash on the proxy_pass.
# It tells nginx to replace /service/ with / when passing the request.
proxy_pass http://apache/;
}
Или, если вы хотите использовать расположение регулярного выражения, просто укажите аргументы:
location ~* ^/service/(.*) {
proxy_pass http://apache/$1$is_args$args;
}