使用Squid作为Maven存储库


10

有人知道如何使用Squid代理Maven存储库吗?

有哪些配置文件?

主要问题在于,maven客户端发出的HTTP请求带有控制缓存行为的标头(我想绕过该标头)。

这是一个典型的请求:

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

我已经disk_cache proxy_http为此使用了Apache HTTPD(和启用的模块),但是我正在创建一个镜像,而不是一个代理。

这是配置(基于该站点):

<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
您是否考虑过使用nexus?
artbristol 2012年

我当然考虑过了。我还测试了其他人。但是没有什么比代理模式下的Apache快。这就是为什么我想使用真实的代理并使用Squid来获得更多性能的原因。
Anthony O.

5
如果您需要性能,请使用内部工件存储库(如工件,联系或Apache档案库)更有意义。每当您想要一个新模块时,他们都会从Internet下载并存储在您的本地网络中,如果您网络中的某人也需要该模块,则无需再次访问Internet进行下载。节省带宽,无需担心Cachesize。
Joao Vitorino

我同意@JoaoVitorino-使用人工制品的快速缓存可能是最好的选择。
slm

Answers:


0

我建议使用像Nexus这样的合适的存储库,该存储库将提供更大的灵活性,例如将Central Maven与您自己的本地工件组合到一个存储库中,在第一次请求时将从Central下载的工件进行缓存(因此您无需托管所有工件,仅需要的部分),保护您免遭中央的工件删除(请考虑使用NPM左面板惨败),使您能够防止使用某些工件(例如,损坏的工件存在安全缺陷,您可以阻止所有用户使用它) 。

而且,最重要的是,您的用户不必浪费时间为Maven / Gradle / etc设置代理配置。有时可能会很棘手...

但是,如果必须在Squid中执行此操作:

将允许的域放入/etc/squid/mavendomains.list

squid.conf(或如果您有包含文件...):

acl maven-domains dstdomain "/etc/squid/mavendomains.list"
acl allowed-networks src x.x.x.x/x
http_access allow allowed-networks maven-domains
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.