Utilizzando Squid come repository Maven


10

Qualcuno sa come utilizzare Squid per proxy i repository Maven?

Quali sono i file di configurazione per quello?

Il problema principale è che il client Mavven emette una richiesta HTTP con intestazioni che controllano il comportamento della cache (e voglio ignorarlo).

Ecco una richiesta tipica:

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

Sto già usando Apache HTTPD (e disk_cache proxy_httpmoduli abilitati) per questo, ma sto creando un mirror, non un proxy.

Ecco la configurazione (basata su quel sito ):

<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
Hai preso in considerazione l'utilizzo di Nexus invece?
artbristol

Certo che l'ho considerato. Ne ho anche testati altri. Ma niente era più veloce di Apache in modalità proxy. Ecco perché volevo usare un vero proxy e usare Squid per ottenere forse ancora più prestazioni.
Anthony O.

5
Se si desidera la perfomance, è più sensato utilizzare un repository artifattivo interno come artificial, nexus o apache archiva. Ogni volta che desideri un nuovo modulo, questi verranno scaricati da Internet e archiviati nella tua rete locale, se qualcuno nella tua rete ha bisogno di questo stesso modulo, non è necessario andare su Internet per effettuare nuovamente il download. Risparmiare larghezza di banda e senza preoccuparsi di Cachesize.
Joao Vitorino,

Sono d'accordo con @JoaoVitorino - usare una cache pull-through di artefattore è probabilmente l'opzione migliore.
slm

Risposte:


0

Consiglierei di utilizzare un repository adeguato come Nexus che consentirà una flessibilità molto maggiore come la combinazione di maven centrale con il tuo artefatto locale in un repository, la memorizzazione nella cache di artefatti scaricati da centrale alla prima richiesta (quindi non è necessario ospitare tutti gli artefatti, solo quelli di cui hai bisogno), ti protegge dalla cancellazione di artefatti in centrale (pensa al fiasco del pad sinistro di NPM), ti consente di prevenire l'uso di alcuni artefatti (supponiamo che ci sia un artefatto rotto che ha un difetto di sicurezza, puoi impedire a tutti gli utenti di usarlo) .

E, soprattutto, i tuoi utenti non devono perdere tempo a configurare le configurazioni proxy per Maven / Gradle / ecc. che a volte può essere complicato ...

Ma se devi farlo in Squid:

Inserisci domini consentiti /etc/squid/mavendomains.list.

In squid.conf(o se hai file di inclusione ...):

acl maven-domains dstdomain "/etc/squid/mavendomains.list"
acl allowed-networks src x.x.x.x/x
http_access allow allowed-networks maven-domains
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.