Использование Squid в качестве репозитория maven

10

Кто-нибудь знает, как использовать Squid для прокси-серверов maven?

Каковы файлы конфигурации для этого?

Основная проблема заключается в том, что клиент maven выдает HTTP-запрос с заголовками, которые управляют поведением кэша (и я хочу это обойти).

Вот типичный запрос:

GET /maven/proxy/jboss-public/org/richfaces/richfaces-bom/4.2.0.Final/richfaces-bom-4.2.0.Final.pom HTTP/1.1
Cache-control: no-cache
Cache-store: no-store
Pragma: no-cache
Expires: 0
Accept-Encoding: gzip
User-Agent: Apache-Maven/3.0.4 (Java 1.6.0_26; Linux 2.6.32-38-generic)
Host: 192.168.2.171
Connection: Keep-Alive

Я уже использую Apache HTTPD (и disk_cache proxy_httpмодули включены) для этого, но я создаю зеркало, а не прокси.

Вот конфигурация (на основе этого сайта ):

<Proxy *>
Order deny,allow 
Allow from all 
</Proxy>

# central 
ProxyPass /maven/proxy/central http://repo1.maven.org/maven2
ProxyPassReverse /maven/proxy/central http://repo1.maven.org/maven2
CacheEnable disk /maven/proxy/central

# jboss-public-repository-group 
ProxyPass /maven/proxy/jboss-public http://repository.jboss.org/nexus/content/groups/public
ProxyPassReverse /maven/proxy/jboss-public http://repository.jboss.org/nexus/content/groups/public
ProxyPassReverseCookiePath /nexus /maven/proxy/jboss-public
CacheEnable disk /maven/proxy/jboss-public

# codehaus
ProxyPass /maven/proxy/codehaus http://repository.codehaus.org/
ProxyPassReverse /maven/proxy/codehaus http://repository.codehaus.org/
CacheEnable disk /maven/proxy/codehaus

CacheDirLength 2
CacheDirLevels 3

# Override default cache expiration and control 
CacheDefaultExpire 2419200
CacheMaxExpire 2419200

# Ignore requests to not serve from cache. Maven data never changes. 
CacheIgnoreCacheControl On
CacheIgnoreNoLastMod On
CacheStoreNoStore On

# Default max file size is 64K. Set to 1GB. 
CacheMaxFileSize 1073741824
Энтони О.
источник
1
Рассматривали ли вы вместо этого нексус?
artbristol
Конечно, я обдумал это. Я также проверял других. Но ничто не было так быстро, как Apache в режиме прокси. Вот почему я хотел использовать настоящий прокси и использовать Squid, чтобы получить еще больше производительности.
Энтони О.
5
Если вам нужна производительность, имейте больше смысла, используйте внутренний артефактный репозиторий, такой как artifactory, nexus или apache archiva. Каждый раз, когда вам нужен новый модуль, они будут загружаться из Интернета и храниться в вашей локальной сети. Если кому-то в вашей сети понадобится этот же модуль, вам не нужно идти в Интернет, чтобы выполнить загрузку снова. Экономия полосы пропускания и без заботы о Cachesize.
Жоао Виторино
Я согласен с @JoaoVitorino - использование сквозного кэша артефакта, вероятно, лучший вариант.
SLM

Ответы:

0

Я бы рекомендовал использовать надлежащий репозиторий, такой как Nexus, который обеспечит гораздо большую гибкость, такую ​​как объединение Central Maven с вашим собственным локальным артефактом в одном хранилище, кэширование артефактов, загруженных из Central по первому запросу (поэтому вам не нужно размещать все артефакты, только те, которые вам нужны), защищает вас от удаления артефактов в центре (например, фиаско NPM leftpad), позволяет предотвратить использование определенных артефактов (скажем, есть сломанный артефакт, который имеет уязвимость безопасности, вы можете заблокировать его использование всеми пользователями) ,

И, кроме того, вашим пользователям не нужно тратить время на настройку прокси-серверов для Maven / Gradle / и т. Д. что иногда бывает сложно ...

Но если вы должны сделать это в Squid:

Поместите разрешенные домены в /etc/squid/mavendomains.list.

В squid.conf(или если у вас есть включаемые файлы ...):

acl maven-domains dstdomain "/etc/squid/mavendomains.list"
acl allowed-networks src x.x.x.x/x
http_access allow allowed-networks maven-domains
ETL
источник