Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

Background

I frequent the OpenGL ES documentation site at http://www.khronos.org/opengles/sdk/1.1/docs/man/. Even though the content is completely static, it seems to force a reload on every single page I visit, which is very annoying.

I have a squid 3.0 proxy set up (apt-get install squid3 on Ubuntu 10.04), and I added a refresh_pattern to force the pages to cache:

refresh_pattern ^http://www.khronos.org/opengles/sdk/1\.1/docs/man/ …
    1440 20% 10080 …
    override-expire ignore-reload ignore-no-cache ignore-private ignore-no-store

This is all on one line, of course. While this appears to work for the XHTML documents (e.g., glBindTexture), it fails to cache the linked content, such as the DTD, some .ent files (?) and some XSL files. The delay in fetching these extra files delays rendering of the main document, so my principal annoyance isn't fixed.

The only difference I can glean with these ancillary files is that they come with an Expires: header set to the current time, whereas the XHTML document has none. But I would have expected the override-expire option to fix this. I have confirmed that documents have the same base URL. I have also truncated the pattern to varying degrees, with no effect.

My questions

  1. Why does the override-expire option not seem to work?
  2. Is there a simple way to tell squid to unconditionally cache a document, no matter what it finds in the response headers?

(Hopefully) relevant output

cache.log

Jan 01 10:33:30 1970/06/25 21:18:27| Processing Configuration File: /etc/squid3/squid.conf (depth 0)
Jan 01 10:33:30 1970/06/25 21:18:27| WARNING: use of 'override-expire' in 'refresh_pattern' violates HTTP
Jan 01 10:33:30 1970/06/25 21:18:27| WARNING: use of 'ignore-reload' in 'refresh_pattern' violates HTTP
Jan 01 10:33:30 1970/06/25 21:18:27| WARNING: use of 'ignore-no-cache' in 'refresh_pattern' violates HTTP
Jan 01 10:33:30 1970/06/25 21:18:27| WARNING: use of 'ignore-no-store' in 'refresh_pattern' violates HTTP
Jan 01 10:33:30 1970/06/25 21:18:27| WARNING: use of 'ignore-private' in 'refresh_pattern' violates HTTP
Jan 01 10:33:30 1970/06/25 21:18:27| DNS Socket created at 0.0.0.0, port 37082, FD 10
Jan 01 10:33:30 1970/06/25 21:18:27| Adding nameserver 192.168.1.1 from /etc/resolv.conf
Jan 01 10:33:30 1970/06/25 21:18:27| Accepting  HTTP connections at 0.0.0.0, port 3128, FD 11.
Jan 01 10:33:30 1970/06/25 21:18:27| Accepting ICP messages at 0.0.0.0, port 3130, FD 13.
Jan 01 10:33:30 1970/06/25 21:18:27| HTCP Disabled.
Jan 01 10:33:30 1970/06/25 21:18:27| Loaded Icons.
Jan 01 10:33:30 1970/06/25 21:18:27| Ready to serve requests.

access.log

Jun 25 21:19:35 2010.710      0 192.168.1.50 TCP_MEM_HIT/200 2452 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/glBindTexture.xml - NONE/- text/xml
Jun 25 21:19:36 2010.263    543 192.168.1.50 TCP_MISS/304     322 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml1-transitional.dtd - DIRECT/74.54.224.215 -
Jun 25 21:19:36 2010.276    556 192.168.1.50 TCP_MISS/304     370 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/mathml.xsl - DIRECT/74.54.224.215 -
Jun 25 21:19:36 2010.666    278 192.168.1.50 TCP_MISS/304     322 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-lat1.ent - DIRECT/74.54.224.215 -
Jun 25 21:19:36 2010.958    279 192.168.1.50 TCP_MISS/304     322 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-symbol.ent - DIRECT/74.54.224.215 -
Jun 25 21:19:37 2010.251    276 192.168.1.50 TCP_MISS/304     322 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-special.ent - DIRECT/74.54.224.215 -
Jun 25 21:19:37 2010.332      0 192.168.1.50 TCP_IMS_HIT/304  316 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/ctop.xsl - NONE/- text/xml
Jun 25 21:19:37 2010.332      0 192.168.1.50 TCP_IMS_HIT/304  316 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/pmathml.xsl - NONE/- text/xml

store.log

Jun 25 21:19:36 2010.263 RELEASE -1 FFFFFFFF D3056C09B42659631A65A08F97794E45  304 1277464776        -1 1277464776 unknown -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml1-transitional.dtd
Jun 25 21:19:36 2010.276 RELEASE -1 FFFFFFFF 9BF7F37442FD84DD0AC0479E38329E3C  304 1277464776        -1 1277464776 unknown -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/mathml.xsl
Jun 25 21:19:36 2010.666 RELEASE -1 FFFFFFFF 7BCFCE88EC91578C8E2589CB6310B3A1  304 1277464776        -1 1277464776 unknown -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-lat1.ent
Jun 25 21:19:36 2010.958 RELEASE -1 FFFFFFFF ECF1B24E437CFAA08A2785AA31A042A0  304 1277464777        -1 1277464777 unknown -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-symbol.ent
Jun 25 21:19:37 2010.251 RELEASE -1 FFFFFFFF 36FE3D76C80F0106E6E9F3B7DCE924FA  304 1277464777        -1 1277464777 unknown -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/xhtml-special.ent
Jun 25 21:19:37 2010.332 RELEASE -1 FFFFFFFF A33E5A5CCA2BFA059C0FA25163485192  304 1277462871 1221139523 1277462871 text/xml -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/ctop.xsl
Jun 25 21:19:37 2010.332 RELEASE -1 FFFFFFFF E2CF8854443275755915346052ACE14E  304 1277462872 1221139523 1277462872 text/xml -1/0 GET http://www.khronos.org/opengles/sdk/1.1/docs/man/pmathml.xsl
share|improve this question
    
can you post the actual patterns in use, the order is important. So you might like to try putting this pattern first and cranking up the limits, like 1440 100% 20160, also, I would remove all those "modifiers".. try them one at a time, I'd suggest just "override-expire" –  Grizly Aug 26 '10 at 5:55
    
@Grizly: I only just noticed your comment (about 1.5 years late). I gave up in the end and mirrored the site, and I don't even use squid anymore, so I'm afraid can't provide any additional data for this question. Sorry. –  Marcelo Cantos Feb 12 '12 at 2:39

2 Answers 2

I don't think there's a way to tell squid to do this out of the box, but if you add an ICAP server, you can modify/scrub headers.

Here's a doc about content adaptation, including setting up ICAP servers: http://wiki.squid-cache.org/SquidFaq/ContentAdaptation

share|improve this answer
  1. refresh-pattern only applies to latter request. if the first request doesn't store the object, there is no expiration date to ignore.
  2. i don't know. i'm looking for this myself on a site which returns Expires: Thu, 01 Jan 1970 00:00:00 UTC. i've tried minimum_expiry_time and header_access Expires deny all through a second proxy, but it's not working.
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.