Я использую NGINX как обратный прокси перед некоторыми приложениями, размещенными на IIS. Моя цель - создать правило перезаписи для определенного места. Дело в том, что само приложение в некоторых случаях отвечает 301 или 302. Это доставляет новый заголовок местоположения, к которому мне также нужно обратиться.
В основном я пытаюсь сделать следующее: - https://mydemo.app.de/abc должен появиться в браузере, но / xyz должен быть доставлен вместо / abc. Это хорошо работает, даже если есть перенаправление (301/302).
Вот моя "наполовину рабочая" конфигурация:
location ~* /abc {
rewrite (?i)/abc/(.*) /xyz/$1 break;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_pass http://mydemo.app.local;
proxy_redirect ~*(.*)\/xyz\/(.*) $1/abc/$2;
proxy_pass_header Server;
# Handle Web Socket connections
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
Теперь иногда вышестоящий сервер возвращает следующее: login.aspx? ReturnUrl = / xyz /, который можно прочитать в браузере. Так быть не должно. Также должен быть / abc /. Насколько я понимаю, часть proxy_redirect должна справиться с этим, но как-то не в моем случае.
Есть ли способ заставить это работать без изменений в самом приложении (что привело бы к большим изменениям ...)?
Любая помощь приветствуется.
Если у вас есть два экземпляра текстовой последовательности /xyz/
, которые нужно заменить на /abc/
, вам потребуется составить обычную выражение, которое соответствует обоим и фиксирует три промежуточных пробелов.
Но вам нужно будет сохранить существующий оператор proxy_redirect
для обработки случая, когда он только один.
Как и во многих директивах Nginx, которые оценивают регулярные выражения, порядок, вероятно, важен, поэтому я бы поместил более конкретное выражение первым.
Например:
proxy_redirect ~*(.*)/xyz/(.*)/xyz/(.*)$ $1/abc/$2/abc/$3;
proxy_redirect ~*(.*)/xyz/(.*)$ $1/abc/$2;