ใช้ Squid เป็นที่เก็บ maven


10

มีคนรู้วิธีการใช้ Squid เพื่อ proxify แหล่งเก็บ 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

ฉันใช้ Apache HTTPD (และdisk_cache proxy_httpเปิดใช้งานโมดูล) อยู่แล้ว แต่ฉันกำลังสร้างมิเรอร์ไม่ใช่พร็อกซี

นี่คือการกำหนดค่า (ขึ้นอยู่กับเว็บไซต์นั้น ):

<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

แน่นอนฉันคิดว่ามัน ฉันยังทดสอบคนอื่นด้วย แต่ไม่มีอะไรเร็วเท่ากับ Apache ในโหมดพรอกซี นั่นเป็นเหตุผลที่ฉันต้องการใช้พร็อกซีที่แท้จริงและใช้ Squid เพื่อให้ได้ประสิทธิภาพมากขึ้น
Anthony O.

5
ถ้าคุณต้องการความสมบูรณ์แบบยิ่งกว่านั้นใช้พื้นที่เก็บข้อมูลวัตถุภายในเช่นอาร์คิเท็ก Nexus หรืออาปาเช่ ทุกครั้งที่คุณต้องการโมดูลใหม่พวกเขาจะดาวน์โหลดจากอินเทอร์เน็ตและจัดเก็บในเครือข่ายท้องถิ่นของคุณหากมีคนในเครือข่ายของคุณต้องการโมดูลเดียวกันนี้ไม่จำเป็นต้องไปที่อินเทอร์เน็ตทำการดาวน์โหลดอีกครั้ง ประหยัดแบนด์วิดธ์และไม่ต้องกังวลกับแคช
Joao Vitorino

ฉันเห็นด้วยกับ @JoaoVitorino - การใช้ pull through cache ของวัตถุน่าจะเป็นตัวเลือกที่ดีที่สุด
slm

คำตอบ:


0

ฉันอยากจะแนะนำให้ใช้พื้นที่เก็บข้อมูลที่เหมาะสมเช่น Nexus ซึ่งจะช่วยให้มีความยืดหยุ่นมากขึ้นเช่นการรวม maven กลางกับสิ่งประดิษฐ์ในพื้นที่ของคุณเป็นที่เก็บเดียวการแคชของสิ่งประดิษฐ์ที่ดาวน์โหลดจากส่วนกลางตามคำขอแรก (ดังนั้นคุณไม่จำเป็นต้องโฮสต์วัตถุทั้งหมด เฉพาะที่คุณต้องการ) ปกป้องคุณจากการลบสิ่งประดิษฐ์ในส่วนกลาง (คิดว่า NPM leftpad fiasco) ช่วยให้คุณสามารถป้องกันการใช้งานของสิ่งประดิษฐ์บางอย่าง (บอกว่ามีสิ่งประดิษฐ์ที่แตกที่มีข้อบกพร่องด้านความปลอดภัยคุณสามารถป้องกันผู้ใช้ทั้งหมดได้) .

และเหนือสิ่งอื่นใดผู้ใช้ของคุณไม่ต้องเสียเวลาในการตั้งค่าการกำหนดค่าพร็อกซีสำหรับ 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.