Usando Squid como repositorio maven

10

¿Alguien sabe cómo usar Squid para proxificar repositorios maven?

¿Cuáles son los archivos de configuración para eso?

El principal problema es que el cliente Maven emite una solicitud HTTP con encabezados que controlan el comportamiento de la caché (y quiero evitar eso).

Aquí hay una solicitud típica:

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

Ya estoy usando Apache HTTPD (y disk_cache proxy_httpmódulos habilitados) para eso, pero estoy creando un espejo, no un proxy.

Aquí está la configuración (basada en ese sitio ):

<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.
fuente
1
¿Has considerado usar nexus en su lugar?
artbristol
Por supuesto que lo he considerado. También he probado otros. Pero nada fue tan rápido como Apache en modo proxy. Es por eso que quería usar un proxy real y usar Squid para quizás obtener aún más actuaciones.
Anthony O.
55
Si desea rendimiento, tenga más sentido use un repositorio interno de artefactos como artifactory, nexus o apache archiva. Cada vez que desee un nuevo módulo, lo descargarán de Internet y lo almacenarán en su red local, si alguien en su red necesita este mismo módulo, no es necesario que vaya a Internet para realizar la descarga nuevamente. Ahorro de ancho de banda y sin preocuparse por Cachesize.
Joao Vitorino
Estoy de acuerdo con @JoaoVitorino: usar un caché extraíble de artefactos es probablemente la mejor opción.
slm

Respuestas:

0

Recomendaría usar un repositorio adecuado como Nexus que permitirá mucha más flexibilidad, como combinar maven central con su propio artefacto local en un repositorio, almacenamiento en caché de artefactos descargados de central a primera solicitud (por lo que no necesita alojar todos los artefactos, solo aquellos que necesita), lo protege de la eliminación de artefactos en el centro (piense en el fiasco del panel izquierdo de NPM), le permite evitar el uso de ciertos artefactos (digamos que hay un artefacto roto que tiene una falla de seguridad, puede bloquear el uso de todos los usuarios) .

Y, sobre todo, sus usuarios no tienen que perder el tiempo configurando configuraciones proxy para Maven / Gradle / etc. lo cual puede ser complicado a veces ...

Pero si debes hacerlo en Squid:

Poner dominios permitidos en /etc/squid/mavendomains.list.

En squid.conf(o si tiene archivos de inclusión ...):

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
fuente