SECURITY WARNING: Never run commands you don't understand. Always review code before execution. Use at your own risk.
Proxy New Added 17 October 2026

Squid: ERR_ACCESS_DENIED Access control configuration prevents your request

The request reached Squid and Squid itself refused it: the destination site is fine. Squid walks http_access rules top to bottom and the first match wins, so a client network missing from localnet, a CONNECT to a port outside SSL_ports, or a new allow rule placed below http_access deny all will all produce this page. The access log shows which client and method was denied.

Quick fix

Read the commands before running them. Anything that restarts a service, deletes data or changes permissions should be tried on a non-production system first.

Quick fix
# See the denied request: TCP_DENIED/403 with the client address
sudo tail -f /var/log/squid/access.log | grep DENIED

# Review rule order; anything after "deny all" never runs
sudo grep -nE '^(acl|http_access)' /etc/squid/squid.conf

# Allow your client network above the final deny
# acl localnet src 10.0.0.0/8 192.168.0.0/16
# http_access allow localnet
# http_access deny all

# Check syntax and reload without dropping connections
sudo squid -k parse && sudo squid -k reconfigure

How to diagnose Proxy errors

A proxy error tells you about the proxy's relationship with the upstream, not about the upstream's business logic. nginx's 502 means it could not get a valid response; 504 means the upstream did not answer in time; Envoy's flag codes (UH no healthy upstream, UF upstream connection failure, NR no route) are far more precise than the status code. Reading those flags is the fastest path to a diagnosis.

If the quick fix above does not resolve it, work through these steps. They apply to this whole class of error, not just to this one message, which is usually what saves the time.

  1. Include upstream detail in the access log format: $upstream_addr, $upstream_status and $upstream_response_time in nginx turn a generic 502 into a specific one.
  2. Bypass the proxy and call the upstream directly from the proxy host. If that works, the issue is proxy configuration: timeouts, buffers, DNS caching or TLS to the backend.
  3. For Envoy, read the response flags in the access log rather than the status code. UH, UF, UO and NR each have distinct fixes.
  4. Check that the proxy re-resolves DNS. nginx caches upstream IPs at startup by default, which breaks when backends move. Use a resolver directive with a variable upstream.
  5. For header-size and body-size errors, raise the limit at every layer; CDN, load balancer and origin each enforce their own.

Tools worth reaching for

  • nginx -T
  • envoy access logs (response flags)
  • haproxy -c -f
  • curl --resolve
  • traefik dashboard

Authoritative references

Primary documentation for this error, worth reading before applying any fix in production.

squid-cache.org wiki.squid-cache.org

Related Proxy errors

See all 20 Proxy errors →

Browse other categories

Something missing or wrong?

This entry is maintained by hand. If the fix is out of date, incomplete, or you have a better one, email a correction and it will be reviewed.