Chapter 13Lesson 03160–215 min

Proxy Caching, Negative Cache, Remote Storage, Routing Rules, Repository Health, and Failure Behavior: Configuration, Design Choices, and Tradeoffs

Choose proxy cache ages, routing-rule strategy, upstream topology, auto-blocking, and egress controls deliberately by balancing freshness, availability, risk, throughput, maintainability, and failure recovery.

FreshnessAvailabilityEgress controlTradeoffsRecovery

Learning objectives

  • Select component, metadata and negative-cache ages based on publication cadence and availability needs.
  • Choose between one broad proxy and multiple purpose-specific proxies without confusing convenience with governance.
  • Use routing rules as a narrow egress control for namespaces while understanding their limits.
  • Decide when auto-blocking protects users and when aggressive retries merely amplify failure.
  • Connect every choice to observable Nexus, upstream, client, storage and recovery state.

1. Freshness versus availability is the central proxy tradeoff

A proxy exists partly to decouple consumers from an upstream. The more aggressively Nexus rechecks the remote, the fresher its view can be—but the more the build fleet depends on remote latency, remote availability and remote rate limits. The longer Nexus trusts cached state, the more resilient repeated builds become—but the longer a mutable upstream or newly published metadata can remain unseen.

Policy choice Freshness Availability / upstream load Best fit
Long component age Lower for mutable upstreams High cache reuse; fewer remote checks Immutable release ecosystems and stable public dependencies
Short component age Higher More remote dependency and request volume Controlled mutable upstream where redeploy is expected
Long metadata age Version lists/indexes may lag Lower metadata traffic Slow-moving repositories
Short metadata age New versions visible sooner More metadata traffic Fast internal publication cadence
Long negative TTL Newly created coordinates appear later Fewer repeated 404s Public upstream with costly/rate-limited misses
Short negative TTL New coordinates appear sooner More 404 traffic Internal upstream with frequent first publication

2. Defaults are a starting point, not a universal SLO

Sonatype documents 1440 minutes as the default for Maximum Component Age and Maximum Metadata Age, and 1440 minutes for the negative Not Found Cache TTL. Those values express a sensible public-proxy bias toward reuse. They are not a requirement that every internal proxy use 24-hour freshness windows.

Before changing them, define a service objective: “new internal releases should be discoverable through the proxy within five minutes” or “a public upstream outage must not break builds for dependencies consumed in the last week.” Then choose cache ages that support the stated objective and monitor request volume after the change.

3. Routing ALLOW versus BLOCK

Strategy Strength Risk Observable proof
BLOCK selected namespaces Easy to add targeted deny rules Everything not matched remains reachable upstream Rule test plus controlled matching/nonmatching requests
ALLOW selected namespaces Strong egress minimization Easy to accidentally omit a legitimate namespace Rule test inventory and dependency-resolution tests
No routing rule Lowest administration overhead Broad upstream exposure and name-confusion surface Proxy config shows no rule; remote requests follow client demand

Use simple matchers. Routing rules use Java regular expressions and are evaluated for proxy request paths. They are not a substitute for entitlement, content-selector privileges, upstream malware policy, signatures or provenance.

4. One proxy versus many proxies

A single Maven Central proxy is simple. Multiple proxies can isolate different remotes, credentials, routing rules, cache ages and failure domains. The tradeoff is configuration sprawl. If the same public upstream needs two materially different egress policies for different consumer populations, separate proxies may be justified; if they are identical except for naming, they probably are not.

Question One proxy favors Multiple proxies favor
Remote credentials One credential set Different upstream identities
Routing rules One rule per proxy Different allow/block policies
Cache ages One freshness profile Different publication cadence
Failure isolation Shared failure domain One remote/policy can fail independently
Operations Less config to audit More precise but more config to maintain
Group design Simple member list More member-order and overlap analysis

5. Auto Blocking versus aggressive retries

When a remote is down, repeated client requests can create a retry storm: client retries trigger Nexus requests, Nexus retries trigger outbound requests, and a failing upstream receives more load precisely when it is least able to respond. Auto Blocking breaks that cycle by temporarily ceasing remote requests while preserving local cache availability and periodically testing for recovery.

Global HTTP retry and timeout values are separate system controls. Sonatype documents defaults such as two connection/socket retry attempts, a 30-second connection/socket timeout and a 20-second request timeout. Raising them can lengthen build stalls and amplify concurrency under failure. Change them only with measured evidence from the Nexus host's network path.

6. Remote credentials and TLS are repository dependencies

Private upstream proxies may store remote HTTP authentication. Treat those credentials as service-account secrets with rotation ownership. A 401/403 from a remote is not fixed by changing the client-to-Nexus password if Nexus itself is the party authenticating to the remote.

Likewise, an upstream certificate chain is validated by the Nexus runtime. Importing trust broadly into the operating system is not automatically equivalent to trusting it in Nexus. Record certificate details and use the Nexus truststore controls deliberately.

7. Private remote URLs now have an explicit security boundary

Current Nexus security guidance validates proxy Remote Storage URLs against loopback, private-network and cloud-metadata targets when SSRF protection is enabled. New installations enable that protection by default; existing installations may retain different behavior until configured. This is why a “quick local HTTP server as upstream” lab can fail on a correctly secured modern instance.

Do not disable SSRF protection globally just to make a training exercise convenient. This chapter uses Maven Central plus the proxy Blocked control for outage simulation so no private-network exception is required.

8. Where Repository Health Check fits

RHC is useful after proxy content exists: it can summarize vulnerability and license information for supported formats. It does not choose cache TTLs, repair a TLS failure, prove remote reachability or enforce routing policy. Community includes the summary; Pro adds the detailed report. Because RHC calls Sonatype services, its own outbound connectivity should also be part of a network runbook.

9. Worked decision: internal releases plus public Maven Central

Assume 80 developers consume public Maven Central and a separate company-owned remote Nexus where internal releases appear several times per hour. A strong design is two proxies: public Central with long negative/component ages and an internal-upstream proxy with shorter metadata/negative ages. The public proxy receives a routing rule that blocks the company namespace. A group places the authoritative local hosted repository before the public proxy.

Decision Choice Reason / observable effect
Public negative TTL Long (for example 24 h) Reduces repeated impossible public requests.
Internal negative TTL Short (for example 2–5 min) Newly created internal coordinates become visible quickly.
Public routing BLOCK company namespace Public proxy never becomes fallback for internal names.
Auto Blocking Enabled Remote outage stops retry amplification while cached items continue.
Client endpoint Group One read endpoint, but each member keeps its own cache/routing behavior.
Promotion Hosted path, not proxy mutation Authoritative content remains separate from caches.

10. What this chapter does not change

Cache design is not a substitute for package-manager local cache management, reverse-proxy TLS, identity-provider policy, CI secret storage, database tuning, blob-store cleanup, backups, release promotion or build-tool dependency locking. Diagnose each layer where it owns state.

11. Knowledge check

Why might an internal upstream use a shorter negative TTL than Maven Central?

When is an ALLOW routing rule safer than BLOCK?

Why can increasing retries make an incident worse?

Should a training lab disable SSRF protection to proxy localhost?

Does RHC detailed reporting remain part of the Community mandatory path?

12. Summary and next step

Proxy configuration is an SLO and risk design, not a collection of arbitrary TTLs. Lesson 4 now applies that design to failure diagnosis where similar symptoms can come from very different layers.

Official references and version notes

Version-sensitive statements were rechecked on 2026-08-26. Sonatype's verified container registry exposes Nexus Repository 3.95.2 as the current latest image line, while the archive-download documentation may lag at 3.94.1. This chapter therefore records the actual running server version as authoritative evidence and uses 3.95.2 only as the concrete current reference baseline. The mandatory work requires Community-compatible proxy repositories, routing rules, cache controls and the Repository Health Check summary only; no Pro-only detailed RHC report, staging, HA, user tokens, export/import or Repository Firewall capability is required.

Keep the academy open

Support free, practical DevOps education.

Every lesson is designed to remain readable in a browser, downloadable from GitHub, and usable without a paid learning platform. Contributions help expand and maintain the curriculum.

Ethereum / ERC-20
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0 Send only Ethereum/ERC-20 compatible assets to this address.