Мы обновили версию весенней загрузки с 1.4.6. до 2.0.6. что заставило нас потерять некоторые значки в пользовательском интерфейсе. В нашем приложении включено кэширование ресурсов с помощью Spring. Во время копания я решил, что часть логики кэширования выполняется преобразователями, поэтому я обнаружил, что поведение CssLinkResourceTransformer было изменено на SPR-14597 , так что вместо относительных абсолютных путей к ресурсам предоставляются.
Это немного запутало нас, потому что ссылки на наши ресурсы стали неправильными. Мы используем nginx в качестве прокси для наших приложений, наша конфигурация nginx выглядит примерно так:
http {
....
server {
server_name my_host;
...
location / {
return 302 $scheme://$http_host/application1/;
}
location /application1/ {
proxy_pass http://127.0.0.1:8001/;
}
location /application2/ {
proxy_pass http://127.0.0.1:8002/;
}
}
Это означает, что все запросы, поступающие на http://my_host/application1
, будут перенаправлены на http://127.0.0.1:8001/
, где находится одно из наших приложений, аналогично логике с приложением2
У нас есть стиль CSS, который указывает на наш ресурс, поэтому теперь вместо url(fontawesome-webfont-1234.eot)
ссылки в style.css мы получили url(/fontawesome-webfont-1234.eot)
, потому что преобразователь CssLinkResource помещает наш контекстный путь, чтобы получить абсолютный путь. Это было бы хорошо, если бы мы не прятались за nginx, но теперь мой браузер пытается извлечь ресурс, вызывая http://my_host/fontawesome-webfont-1234.eot
вместо http://my_host/application1/fontawesome-webfont-1234.eot
Мы решили эту проблему, изменив конфигурацию nginx, чтобы URL-адрес прокси-сервера также содержал URL-адрес местоположения, и мы обновили путь контекста конфигурации весенней загрузки application.yml
http {
....
server {
server_name my_host;
...
location / {
return 302 $scheme://$http_host/application1/;
}
location /application1/ {
proxy_pass http://127.0.0.1:8001/application1;
}
location /application2/ {
proxy_pass http://127.0.0.1:8002/application2;
}
}
Spring boot application.yml:
...
server:
address: 0.0.0.0
port: 8001
servlet:
context-path: /application1
...
Это действительно так, как это сделать, или я что-то упустил? Меня не устраивает то, как сейчас выглядит моя конфигурация nginx, очевидно, что то, что я добавил в url proxy_pass, кажется избыточным