#nginx #nginx-reverse-proxy #nginx-config #nginx-location
Вопрос:
Итак, у меня есть сервер NGNIX, который получает трафик из одного и того же местоположения (Akamai), и на основе пути входящего URL-адреса я отправляю трафик в разные приложения.
Я добавил новый источник в Akamai, и теперь это означает, что некоторые входящие запросы теперь имеют новый путь. Проблема в том, что моему приложению требуется, чтобы путь имел определенное значение.
Поскольку я делюсь слотом Akamai с другими источниками, я не могу отправить запрос по одному и тому же пути двум разным источникам, так как слот путается в том, на какой исходный сервер направлять трафик.
Поэтому я хотел бы изменить путь, прежде чем передавать его приложению. Я не уверен, как лучше всего это сделать, и мне нужна некоторая помощь. Должен ли я использовать перезапись, перенаправление или подфильтр?
На самом деле я пробовал все три, но мне чего-то не хватает в этой очень простой задаче.
location /incoming_path { max_ranges 0; proxy_set_header Accept-Encoding ""; proxy_pass https://$upstream_application:9002; proxy_ssl_server_name on; proxy_ssl_certificate /etc/nginx/conf.d/server_cert.pem; proxy_ssl_certificate_key /etc/nginx/conf.d/server_key.pem; proxy_set_header Host $host; proxy_set_header X-Real-IP $proxy_protocol_addr; sub_filter_types *; sub_filter "https://$proxy_host/incoming_path" "https://$host/new_path" sub_filter_once on; }
Действительно был бы признателен за любые идеи/мысли о том, как этого достичь, заранее спасибо.
Ответ №1:
Похоже, это сработало:
location /incoming_path { max_ranges 0; rewrite /incoming_path/(.*) /new_path/$1 break; proxy_pass https://$upstream_application:9002; proxy_ssl_server_name on; proxy_ssl_certificate /etc/nginx/conf.d/server_cert.pem; proxy_ssl_certificate_key /etc/nginx/conf.d/server_key.pem; proxy_set_header Host $host; proxy_set_header X-Real-IP $proxy_protocol_addr; }
Комментарии:
1. Вам даже не нужно переписывать URI, просто используйте
proxy_pass https://$upstream_application:9002/new_path;
. Почему вы ставите перед именами всех переменных косую черту? Это должно нарушить вашу конфигурацию, я не понимаю, как она может продолжать работать, используя их.2. Они необходимы, так как конфигурационный файл создается в heredoc внутри скрипта docker entrypoint.
3. Я попытался установить proxy_pass, как было предложено выше, но это не сработало — я не стал продолжать расследование и переключился обратно на перезапись.