[squid-users] Pages sometimes load as a mess of random (?) symbols
Amos Jeffries
squid3 at treenet.co.nz
Thu Oct 5 07:39:02 UTC 2017
On 05/10/17 19:42, Grey wrote:
> Sorry for not including enough informatio nin the first place.
>
> 1. Here's my config, keep in mind it's a test server that will eventually
> replace the one (not updated) we're using right now so the configuration is
> kinda bare-bones:
>
> ### TESTSQUID1 ###
>
> http_port 3128
> dns_v4_first on
> pinger_enable off
> netdb_filename none
>
> error_default_language it
> cache_mgr helpdesk at test.it
>
> acl SSL_ports port 443
> acl Safe_ports port 80 # http
> acl Safe_ports port 21 # ftp
> acl Safe_ports port 443 # https
> acl Safe_ports port 70 # gopher
> acl Safe_ports port 210 # wais
> acl Safe_ports port 1025-65535 # unregistered ports
> acl Safe_ports port 280 # http-mgmt
> acl Safe_ports port 488 # gss-http
> acl Safe_ports port 591 # filemaker
> acl Safe_ports port 777 # multiling http
> acl CONNECT method CONNECT
>
> auth_param negotiate program /usr/lib/squid/negotiate_kerberos_auth -r -d
> auth_param negotiate children 150
> auth_param negotiate keep_alive on
>
> external_acl_type ProxyUser children-max=75 %LOGIN
> /usr/lib/squid/ext_kerberos_ldap_group_acl -g INTERNET at TEST.LOCAL -D
> TEST.LOCAL -S testldap
> acl ProxyUser external ProxyUser
>
> acl AUTH proxy_auth REQUIRED
> http_access deny !AUTH all
So two problems.
1) 'all' here means clients with incorrect OR missing auth credentials
do not get challenged for working credentials. Since any sane client
security system will not present credentials until told they are
necessary the above should rightfully prevent *any* secure clients from
using this proxy.
2) your custom config lines should be placed below the default security
settings. This is especially important for ACLs like auth which involve
a lot of background work. The default settings are there to block things
like DoS or attacks that can be trivially and quickly denied, and to do
so with minimal CPU expense.
>
> http_access deny !Safe_ports all
> http_access deny CONNECT !SSL_ports all
> http_access allow localhost manager
> http_access deny manager all
> http_access allow localhost all
If you place the "allow localhost" above the "deny manager" you can
remove one extra line of checks.
>
> acl destsquid dstdomain .testquid1 .testsquid2
> http_access allow destsquid all
The 'all' ACL is a pointless waste of CPU cycles on all of the lines above.
>
> http_access allow ProxyUser all
The 'all' ACL here *might* prevent unauthenticated clients from being
challenged for credentials like the 'deny !AUTH' line did. But YMMV. It
either does that or is pointless.
The current 3.5 provides the %un format code which should not generate
an auth challenge. That should eliminate the need for the all-hack here.
> http_access deny all
>
> icap_enable on
> icap_send_client_ip on
> icap_send_client_username on
> icap_client_username_encode off
> icap_client_username_header X-Authenticated-User
> icap_preview_enable on
> icap_preview_size 1024
> icap_service service_req reqmod_precache bypass=1
> icap://testicap:1344/REQ-Service
> adaptation_access service_req allow all
> icap_service service_resp respmod_precache bypass=0
> icap://testicap:1344/resp
> adaptation_access service_resp allow all
>
> coredump_dir /var/spool/squid
>
> refresh_pattern ^ftp: 1440 20% 10080
> refresh_pattern ^gopher: 1440 0% 1440
> refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
> refresh_pattern . 0 20% 4320
>
> 2. This is the access log when first loading the page:
>
> 1507185342.611 0 99.99.99.99 TCP_DENIED/407 5179 GET
> http://www.tomshardware.com/ - HIER_NONE/- text/html
> 1507185344.121 1473 99.99.99.99 TCP_MISS/200 48225 GET
> http://www.tomshardware.com/ testuser HIER_DIRECT/23.40.112.227 text/html
>
> And this is the one after reloading:
>
By "reloading" do you mean:
* using a testing tool that sends an identical repeat request? or
* clicking + pressing enter in a browser address bar? or
* pressing the browser reload button? or
* pressing the force-refresh (F5) button? or
* holding shift while doing any of the above?
Only the first two above methods will perform a clean HTTP test request.
The others all deliver cache controls to force specific cache behaviour
which void the test results.
> 1507185356.932 187 99.99.99.99 TCP_MISS/200 47858 GET
> http://www.tomshardware.com/ testuser HIER_DIRECT/23.40.112.227 text/html
> 1507185357.425 0 99.99.99.99 TCP_DENIED/407 4440 GET
> http://platform.twitter.com/widgets.js - HIER_NONE/- text/html
> 1507185357.482 13 99.99.99.99 TCP_MISS/200 2019 GET
> http://www.tomshardware.com/medias/favicon/favicon-32x32.png? testuser
> HIER_DIRECT/23.40.112.227 image/png
> 1507185357.548 61 99.99.99.99 TCP_REFRESH_UNMODIFIED/304 516 GET
> http://platform.twitter.com/widgets.js testuser HIER_DIRECT/199.96.57.6 -
> 1507185357.565 0 99.99.99.99 TCP_DENIED/407 4178 CONNECT
> www.tomshardware.com:443 - HIER_NONE/- text/html
> 1507185357.924 0 99.99.99.99 TCP_DENIED/407 4190 CONNECT
> syndication.twitter.com:443 - HIER_NONE/- text/html
>
> 3. The result of the test at redbot
> (https://redbot.org/?uri=http%3A%2F%2Fwww.tomshardware.com%2F if you want to
> check it yourself) is:
>
> General
> The Pragma header is deprecated.
> The Content-Length header is correct.
> Content Negotiation (Content Negotiation response )
> The resource doesn't send Vary consistently.
^^ this one is what I meant. There are several side effects of this -
mostly just annoying MISS behaviours, but sometimes the wrong
content-type can end up being associated with a cached object and things
appear as you described the problem
Also, IIRC NginX (which appears to be the server for that site) was
known to have several bugs that led to these types of broken
content-type behaviour some years back. I'm not sure if that ever got fixed.
> The response body is different when content negotiation happens.
> Content negotiation for gzip compression is supported, saving 86%.
> Caching
> Pragma: no-cache is a request directive, not a response directive.
> This response can't be stored by a cache.
>
> So it indeed seems that this could be the problem, right? Anything I can do
> on my end to resolve/mitigate it?
I see that the server is already sending out "Cache-Control: no-store"
so the problem is not your Squid but something upstream. Just make sure
you do not override that no-store for these sites and your proxy will
continue not to be adding problems.
It may be the ICAP service mangling the response type from gzip to
text/plain incorrectly (ie without actually unzipping), or removing the
relevant cache-controls.
Or equally likely; a proxy upstream force-caching, thus making itself
*and* yours run afoul of the Vary issue. This is where I suspect the
NginX or some hidden intermediary.
Amos
More information about the squid-users
mailing list