З документації про 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;
}