nginx: как добавить URI-путь к хосту в директиве proxy_pass?

nginx: как добавить URI-путь к хосту в директиве proxy_pass?

Проблема:

  • Я использую директиву nginx proxy_passдля перенаправления httpsзапросов с определенным locationпутем в URI, например, https://domain/path/index.htmlна http://container_ip:port/index.html.
  • Это отлично подходит для первоначального запроса.
  • Однако если в HTML-файле указаны ресурсы для загрузки, клиенты ищут эти ресурсы без пути, используя только базовый URL; в примере https://domain/main.css.

Вопрос:
Как настроить nginx так, чтобы такие ресурсы также искались по исходному пути; в примере по адресу https://domain/path/main.css?

Текущая неверная конфигурация nginx:

server {
    listen 443 ssl;
    server_name domain;

    [...]

    location /path/ {
        proxy_set_header Host $host;
        proxy_pass http://container_ip:port/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

решение1

Пути к ресурсам генерируются вашим приложением. Правильный и надежный подход — исправить ваше приложение, чтобы оно генерировало URL-адреса ресурсов с правильными путями.

Если вам нужно ненадежное решение, вы можете попробовать использоватьhttp://nginx.org/en/docs/http/ngx_http_sub_module.htmlдля замены URL-адресов ресурсов в ответах, которые проксирует nginx. Однако существует вероятность нежелательных побочных эффектов, которые трудно диагностировать.

Связанный контент