Не получается настроить proxy_pass с параметром

Имеется поддомен s. и есть сервер ExpressJS. Хочу настроить nginx так, чтобы он слушал запросы на s.example.com/2t9HCYA, но к прокси запрос передавал как example.com/s/2t9HCYA. Пробовал два варианта:

1) proxy_pass http://localhost:3000/s$1; - к прокси серверу приходит просто /s

2) Также к прокси приходит только /s:

rewrite ^ /s$1 break;
proxy_pass http://localhost:3000;

Хотя если передать значение $1 через proxy_set_header, то в заголовках запроса 2t9HCYA будет присутствовать. Почему эта переменная напрочь игнорируется nginx и как заставить её работать?


Ответы (1 шт):

Автор решения: Alexey Ten

Если оставлять ваш try_files и именованый location, тогда нужно правильно использовать rewrite:

location @express {
    rewrite ^(.+) /s$1 break;
    proxy_pass http://localhost:3000;
    # другие proxy_* директивы
}

А можно переписать так:

location / {
    try_files $uri /s$uri;
}

location /s/ {
    proxy_pass http://localhost:3000/s/;
    # другие proxy_* директивы
}
→ Ссылка