Re: Кэширование репозиториев maven/pypi/npm - proxy_cache или proxy_store
Eugene Prokopiev
eugene.prokopiev на gmail.com
Вс Ноя 26 06:53:54 UTC 2023
чт, 23 нояб. 2023 г. в 17:56, Vladislav Shabanov <vlad.shabanov на gmail.com>:
>
> Ну, как устроена реальная жизнь:
Спасибо за интересный логрид :) Но вот как устроена наша жизнь на примере maven:
День 1 - Все так, да
День N - А зачем обманывать исходный репозиторий? Если версии прибиты
гвоздями - выдадим то, что просили. Если что-нибудь в духе 'm.n.+' -
сначала вытянем оглавление (в случае maven это файл
maven-metadata.xml), в нем найдем требуемую версию и ее уже отдадим.
Если в итоге в CLASSPATH попли несколько версий одной и той же
библиотеки - ну значит таков путь, разработчики сами себе буратины
(хотя, возможно, именно этого они и хотели - и разные класслоадеры им
в помощь)
День М - И снова врать нехорошо, отдадим что просят - и непонятно
зачем что-то выкидывать и скачивать заново
У PyPI оглавление генерится на лету в виде HTML, но если мы знаем
точные версии пакетов (хотя python-разработчики прописывают их в
requirements.txt довольно редко) - они будут выкачиваться сразу
А вот мире NPM packages-lock.json в дополнение к packages.json
используют почти всегда - т.е. мы снова можем выкачивать явно
указанные версии, в противном случае нужно сначала GET-запросами к
API-серверу их узнать
Одним словом, операции "скачать пакет какой-нибудь (наверное
последней) версии" ни в одном из этих трех случаев нет - и описанные
безобразия в день N и день М происходить не должны - т.е. репозитории
Maven/PyPI/NPM выглядят вполне пригодными для кэширования именно на
уровне HTTP
Тут беда приходит откуда не ждали (и к логике репозиториев отношения не имеет):
location /clojars {
proxy_pass https://repo.clojars.org;
}
curl -v http://localhost/clojars/
* Trying 127.0.0.1:80...
* Connected to localhost (127.0.0.1) port 80
> GET /clojars/ HTTP/1.1
> Host: localhost
> User-Agent: curl/8.4.0
> Accept: */*
>
< HTTP/1.1 421 Misdirected Request
< Server: nginx/1.25.3
< Date: Sun, 26 Nov 2023 06:49:03 GMT
< Content-Type: text/plain; charset=utf-8
< Content-Length: 297
< Connection: keep-alive
< x-served-by: cache-fra-eddf8230058
<
Requested host does not match any Subject Alternative Names (SANs) on
TLS certificate
[f38588ca7dc3f37ec048583198230295986084302bfd4d5c2d944911bd377a95] in
use with this connection.
Visit https://docs.fastly.com/en/guides/common-400-errors#error-421-misdirected-request
for more information.
* Connection #0 to host localhost left intact
И что-то я не могу подобрать комбинацию из proxy_ssl_*, чтоб
repo.clojars.org отдал через pass_proxy что-нибудь более
вразумительное - подскажете?
Да, первоначальный вопрос про proxy_store vs proxy_cache* по-прежнему
актуален :)
--
WBR,
Eugene Prokopiev
Подробная информация о списке рассылки nginx-ru