Я хотел бы переписать URL в обратном прокси так, чтобы он удалил первый сегмент, но оставил все последующие сегменты нетронутыми. Мне нужно, чтобы это произошло до того, как он достигнет прохода прокси.
Пример:
/admin/auth/local ----> (REWRITES TO) /auth/local
/admin/auth/register -------> (REWRITES TO) /auth/register
Блок «Мое местоположение»:
location /admin {
#add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
proxy_set_header Host $host;
proxy_set_header X-Real-Ip $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass_header Set-Cookie;
proxy_read_timeout 30;
proxy_buffers 64 8k;
rewrite /admin / break;
proxy_pass http://127.0.0.1:9000;
Я попробовал следующее, но безуспешно:
rewrite /admin / break;
решение1
Здесь есть две части. Первая — как nginx маршрутизирует входящие запросы через proxy_pass
.
Там можно сопоставить входящие запросы с /
бэкэндом с /admin/
префиксом со следующей конфигурацией:
location / {
proxy_pass http://127.0.0.1:9000/admin/;
}
Никаких rewrite
заявлений не требуется.
Вторая часть — это URL-адреса, которые генерируются приложением, работающим в 127.0.0.1:9000
. Вам необходимо настроить это приложение для генерации URL-адресов без /admin
префикса, чтобы иметь URL-адреса, соответствующие настройке маршрутизации nginx.
Nginx не может надежно вносить изменения в контент, сгенерированный бэкэндом.
решение2
Я считаю, что вам просто нужно добавить свой первый сегмент (администратор) в прокси-пропуск.
proxy_pass http://www.example.com/admin/;
решение3
Можете попробовать следующий фрагмент. У меня работает.
location ~* /admin/(.*) {
...
rewrite .* /$1 break;
proxy_pass http://127.0.0.1:9000;
}
(.*)
из первой строки извлекается в блоке как $1
. Идея состоит в том, чтобы извлечь URI после admin/
и заменить все этим URI.