Сохранять базовый URL при загрузке ресурсов на прокси-страницу - PullRequest
0 голосов
/ 07 марта 2020

Я пытаюсь разместить сайт (называемый site1), вложенный в существующий домен (www.gateway.com).

Например, вместо www.site1.com/profile это будет www.gateway.com/site1/profile.

У меня есть NGINX обратный прокси-сервер, который обнаруживает путь /site1/ и передает его на некоторые последующие машины:

location ~/site1/(.*)$ {
  proxy_pass http://upstreams/$1$is_args$args;

  proxy_set_header Host $host;
}

Сам прокси работает нормально - он перенаправляет все пути правильно. Однако ресурсы сайта (например, JS, CSS, et c.) Не сохраняют базовый путь (www.gateway.com/site1).

Например, он пытается загрузить www.gateway.com/normalize.css, когда фактический актив живет в www.gateway.com/site1/normalize.css.

. Для справки, HTML для site1 - это источники активов, например:

<link href="/normalize.css" rel="stylesheet" />

Я также пытался удалить ведущий / в href, но это приводит к пути актива, включая полный маршрут (за исключением последнего фрагмента) - также не то, что нужно.

Обратите внимание, что site1 отлично работает, когда размещено на root домена (например, www.gateway.com/profile).

Любые идеи будут полезны. Спасибо!

1 Ответ

0 голосов
/ 07 марта 2020

Возможно, у вас уже есть блок, который проверяет наличие полей c, которые портят ваши активы. Для меня то, что вы делаете, кажется нормальным, но у вас есть другой nginx код ресурса, возможно, либо в upstream, либо на site1. Добавьте блок, который проверяет наличие файлов c. Если вы делаете это только для одного или двух сайтов, это разумно.

Код ниже должен работать, пока вы не получите больше информации о другом коде актива.

location ~/site1/(.*)$ {

          location ~* \.(?:js|css|jpg|jpeg|gif|png|ico|cur|svg)$ {
            alias /location/of/site1; 
            expires 1M;
            access_log off;
            sendfile on;
            sendfile_max_chunk 1m;
            add_header Cache-Control public;
          }

          location ~* {
            try_files $uri @nonStatic;
          }


}

location @nonStatic {  
  proxy_pass http://upstreams/$1$is_args$args;
  proxy_set_header Host $host;
}
...