While it works in most of the sites we host, we have found some weird exceptions.
I checked Purge server logs and it does look like this site sends wrongly formatted Purge/GET requests, it looks like below:
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-normalfakta HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-smartfakta HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-otherfakta HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-tabletfakta HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-tabletnode/4611 HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-normalnode/4611 HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-smartnode/4611 HTTP/1.1" 400 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-othernode/4611 HTTP/1.1" 400 166 "-" "-"
While it should be:
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-normal/fakta HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-smart/fakta HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-other/fakta HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-tablet/fakta HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-tablet/node/4611 HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-normal/node/4611 HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-smart/node/4611 HTTP/1.1" 404 166 "-" "-"
127.0.0.1 - - [14/Feb/2012:13:05:20 +0100] "GET /purge-mobile-other/node/4611 HTTP/1.1" 404 166 "-" "-"
The missing forward slash seems to be reason of Nginx Error 400 (because Nginx returns Error 400 when it receives GET with URI without the forward slash at the beginning.
However, after enabling more verbose error log in Nginx it says that the real reason is different:
2012/02/14 17:33:50 [info] 46097#0: *325844 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-normalfakta HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325850 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-smartnode/4611 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325849 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-tabletnode/4611 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325848 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-normalnode/4611 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325847 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-otherfakta HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325846 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-smartfakta HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325845 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-tabletfakta HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325867 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-othernode/4616 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325866 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-smartnode/4616 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325865 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-mobile-tabletnode/4616 HTTP/1.1"
2012/02/14 17:33:50 [info] 46097#0: *325864 client sent HTTP/1.1 request without "Host" header while reading client request headers, client: 127.0.0.1, server: _, request: "GET /purge-normalnode/4616 HTTP/1.1"
So it looks like the Host header is missing.
Now, many other sites on the same server work just fine, so there must be something in its code/contrib module space which causes either Purge (or is it caused by Expire?) module to send wrongly formatted GET request - with missing slash and without Host header.
However, I don't see any suspicious module in the list of modules enabled in this site:
drush pml --status=enabled --no-core --type=module
Package Navn Version
Administration Admin (admin) 6.x-1.0-beta3
Anden Advanced help (advanced_help) 6.x-1.2
Anden Backup and Migrate (backup_migrate) 6.x-2.4
Anden Better Formats (better_formats) 6.x-1.2
Anden Block Class (block_class) 6.x-1.3
Anden CKEditor (ckeditor) 6.x-1.1
Anden Clone module (clone) 6.x-1.2
Anden Global Redirect (globalredirect) 6.x-1.2
Anden Menu Block (menu_block) 6.x-2.3
Anden Multistepform (multistepform)
Anden Pathauto (pathauto) 6.x-1.3
Anden robots.txt (robotstxt) 6.x-1.x-dev
Anden Seven Up (sevenup) 6.x-0.3
Anden Token (token) 6.x-1.13
Caching Cache (cache) 6.x-1.x-dev
CCK Content (content) 6.x-2.6
CCK Content Copy (content_copy) 6.x-2.6
CCK Custom Formatters (custom_formatters) 6.x-1.4
CCK Email (email) 6.x-1.2
CCK Fieldgroup (fieldgroup) 6.x-2.6
CCK FileField (filefield) 6.x-3.3
CCK FileField Nginx Progress (filefield_nginx_progress) 6.x-1.4
CCK ImageField (imagefield) 6.x-3.3
CCK Link (link) 6.x-2.8
CCK Node Reference (nodereference) 6.x-2.6
CCK Number (number) 6.x-2.6
CCK Option Widgets (optionwidgets) 6.x-2.6
CCK Text (text) 6.x-2.6
Date/Time Date (date) 6.x-2.4
Date/Time Date API (date_api) 6.x-2.4
Date/Time Date Timezone (date_timezone) 6.x-2.4
Date/Time Date Tools (date_tools) 6.x-2.4
Development Node import (node_import) 6.x-1.0-rc4
Display suite Display suite (ds) 6.x-1.2
Display suite Display suite UI (ds_ui) 6.x-1.2
Display suite ND CCK (nd_cck) 6.x-2.2
Display suite Node displays (nd) 6.x-2.2
ImageCache ImageAPI (imageapi) 6.x-1.8
ImageCache ImageAPI GD2 (imageapi_gd) 6.x-1.8
ImageCache ImageCache (imagecache) 6.x-2.0-beta10
ImageCache ImageCache UI (imagecache_ui) 6.x-2.0-beta10
Mail Mime Mail (mimemail) 6.x-1.0-alpha7
Other Featured Content (featured_content) 6.x-1.0-beta4
Performance and scalability Cache Expiration (expire)
Performance and scalability DB Tuner (dbtuner) 6.x-1.x-dev
Performance and scalability Purge (purge)
Pressflow Path alias cache (path_alias_cache)
Printer, e-mail and PDF versions Printer-friendly pages (print) 6.x-1.10
Statistics Google Analytics (googleanalytics) 6.x-2.2
User interface External Links (extlink) 6.x-1.11
Views Views (views) 6.x-2.10
Views Views Custom Field (views_customfield) 6.x-1.0
Views Views GroupBy (views_groupby) 6.x-1.0-rc2
Views Views PHP (views_php) 6.x-1.x-dev
Views Views Slideshow (views_slideshow) 6.x-2.1
Views Views Slideshow: SingleFrame (views_slideshow_singleframe) 6.x-2.1
Views Views Table Highlighter (views_table_highlighter) 6.x-1.1
Views Views UI (views_ui) 6.x-2.10
Any ideas?
Comments
Comment #1
SqyD commentedHi omega8cc,
I just committed some changes to the purging logic for the GET method that could change your situation. Could you test again please?
Comment #2
SqyD commentedI believe this was fixed some time ago.... reopen if you don't agree.