Usando o Squid como um repositório maven

10

Alguém sabe como usar o Squid para proxify repositórios maven?

Quais são os arquivos de configuração para isso?

O principal problema é que o cliente maven emite uma solicitação HTTP com cabeçalhos que controlam o comportamento do cache (e eu quero ignorá-lo).

Aqui está uma solicitação 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

Eu já estou usando o Apache HTTPD (e disk_cache proxy_httpmódulos ativados) para isso, mas estou criando um espelho, não um proxy.

Aqui está a configuração (com base nesse 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.
fonte
1
Você já pensou em usar o nexus?
Artbristol # 8/12
Claro que eu considerei isso. Eu também testei outros. Mas nada foi tão rápido quanto o Apache no modo proxy. É por isso que eu queria usar um proxy real e usar o Squid para talvez obter ainda mais performances.
Anthony O.
5
Se você deseja desempenho, faça mais sentido usar um repositório interno de artefatos, como o arquivo artifactory, nexus ou apache. Sempre que você desejar um novo módulo, ele fará o download da Internet e armazenará na sua rede local. Se alguém da sua rede precisar desse mesmo módulo, não será necessário acessar a Internet para fazer o download novamente. Economizando largura de banda e sem se preocupar com o Cachesize.
Joao Vitorino
Concordo com o @JoaoVitorino - usar um cache de artefatos é provavelmente a melhor opção.
SLM

Respostas:

0

Eu recomendaria o uso de um repositório adequado como o Nexus, que permitirá muito mais flexibilidade, como combinar o maven central com seu próprio artefato local em um repositório, armazenar em cache os artefatos baixados da central na primeira solicitação (para que você não precise hospedar todos os artefatos, somente aqueles que você precisa), protege você contra a exclusão de artefatos na central (pense no NPM leftpad fiasco), permite impedir o uso de certos artefatos (digamos que há um artefato quebrado que possui uma falha de segurança, você pode impedir que todos os usuários o usem) .

E, acima de tudo, seus usuários não precisam perder tempo configurando configurações de proxy para o Maven / Gradle / etc. o que pode ser complicado às vezes ...

Mas se você deve fazer isso no Squid:

Coloque domínios permitidos /etc/squid/mavendomains.list.

Em squid.conf(ou se você tiver arquivos incluídos ...):

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
fonte