Używanie Squid jako repozytorium maven

10

Czy ktoś wie, jak używać Squid do proxy repozytoriów maven?

Jakie są pliki konfiguracyjne do tego?

Głównym problemem jest to, że klient maven wydaje żądanie HTTP z nagłówkami, które kontrolują zachowanie pamięci podręcznej (i chcę to pominąć).

Oto typowa prośba:

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

Już do tego używam Apache HTTPD (i disk_cache proxy_httpwłączone moduły), ale tworzę kopię lustrzaną, a nie proxy.

Oto konfiguracja (oparta na tej stronie ):

<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
Anthony O.
źródło
1
Czy zamiast tego zastanawiałeś się nad użyciem Nexusa?
artbristol,
Oczywiście, że to rozważałem. Testowałem także innych. Ale w trybie proxy nic nie było tak szybkie jak Apache. Dlatego chciałem użyć prawdziwego proxy i użyć Squid, aby być może uzyskać jeszcze więcej wyników.
Anthony O.
5
Jeśli chcesz wydajności, bardziej sensownie skorzystaj z wewnętrznego repozytorium artefaktów, takiego jak artifactory, nexus lub apache archiva. Za każdym razem, gdy chcesz, aby nowy moduł pobierał z Internetu i przechowywał w sieci lokalnej, jeśli ktoś w twojej sieci potrzebuje tego samego modułu, nie ma potrzeby, aby przejść do Internetu, aby pobrać ponownie. Oszczędzanie przepustowości i bez dbania o Cachesize.
Joao Vitorino
Zgadzam się z @JoaoVitorino - użycie przeciągającej się pamięci podręcznej artefaktów jest prawdopodobnie najlepszą opcją.
slm

Odpowiedzi:

0

Polecam użycie odpowiedniego repozytorium, takiego jak Nexus, które zapewni znacznie większą elastyczność, np. Połączenie centralnego maven z własnym lokalnym artefaktem w jednym repozytorium, buforowanie artefaktów pobranych z centralnego na pierwsze żądanie (więc nie musisz hostować wszystkich artefaktów, tylko te, których potrzebujesz), chroni cię przed usunięciem artefaktów w centrali (pomyśl fiasko po lewej stronie NPM), pozwala zapobiec użyciu niektórych artefaktów (powiedzmy, że istnieje uszkodzony artefakt, który ma wadę bezpieczeństwa, możesz zablokować wszystkim użytkownikom korzystanie z niego) .

Przede wszystkim użytkownicy nie muszą tracić czasu na konfigurowanie konfiguracji proxy dla Maven / Gradle / itp. co czasami może być trudne ...

Ale jeśli musisz to zrobić w Squid:

Wprowadź dozwolone domeny /etc/squid/mavendomains.list.

W squid.conf(lub jeśli masz dołączone pliki ...):

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
źródło