Utilisation de Squid comme référentiel maven

10

Est-ce que quelqu'un sait comment utiliser Squid pour proxyer les référentiels maven?

Quels sont les fichiers de configuration pour cela?

Le problème principal est que le client maven émet une requête HTTP avec des en-têtes qui contrôlent le comportement du cache (et je veux contourner cela).

Voici une demande typique:

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

J'utilise déjà Apache HTTPD (et les disk_cache proxy_httpmodules activés) pour cela, mais je crée un miroir, pas un proxy.

Voici la configuration (basée sur ce site ):

<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.
la source
1
Avez-vous envisagé d'utiliser Nexus à la place?
artbristol
Bien sûr, je l'ai considéré. J'en ai également testé d'autres. Mais rien n'était aussi rapide qu'Apache en mode proxy. C'est pourquoi je voulais utiliser un vrai proxy et utiliser Squid pour peut-être obtenir encore plus de performances.
Anthony O.
5
Si vous voulez des performances, il est plus judicieux d'utiliser un référentiel artificiel interne comme artifactory, nexus ou apache archiva. Chaque fois que vous voulez un nouveau module, il sera téléchargé à partir d'Internet et stocké sur votre réseau local.Si quelqu'un de votre réseau a besoin de ce même module, il n'est pas nécessaire de revenir sur Internet pour faire le téléchargement. Économie de bande passante et sans souci de Cachesize.
Joao Vitorino
Je suis d'accord avec @JoaoVitorino - l'utilisation d'une mémoire cache artificielle est probablement la meilleure option.
slm

Réponses:

0

Je recommanderais d'utiliser un référentiel approprié comme Nexus qui offrira beaucoup plus de flexibilité, comme la combinaison du maven central avec votre propre artefact local dans un référentiel, la mise en cache des artefacts téléchargés depuis le central à la première demande (vous n'avez donc pas besoin d'héberger tous les artefacts, seulement ceux dont vous avez besoin), vous protège de la suppression des artefacts dans le centre (pensez au fiasco du clavier gauche du NPM), vous permet d'empêcher l'utilisation de certains artefacts (disons qu'il y a un artefact cassé qui a un défaut de sécurité, vous pouvez empêcher tous les utilisateurs de l'utiliser) .

Et surtout, vos utilisateurs n'ont pas à perdre de temps à configurer des configurations de proxy pour Maven / Gradle / etc. ce qui peut parfois être délicat ...

Mais si vous devez le faire dans Squid:

Mettez les domaines autorisés /etc/squid/mavendomains.list.

Dans squid.conf(ou si vous avez des fichiers inclus ...):

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
la source