Проблема:
- Я использую директиву 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. Однако существует вероятность нежелательных побочных эффектов, которые трудно диагностировать.