Nginx:对于Http范围请求ie206,自定义头在x-redirect链的情况下被阻止



当我们想让Etag通过x重定向链作为Http响应的一部分来传播范围请求(Http 206)时,我们遇到了这种奇怪的行为。似乎nginx过滤掉任何额外的服装头/tmp变量作为最终响应的一部分,通过x-redirect非200响应。请建议解决这个问题的方法。

这是在正常和范围请求清除的调试模式下的日志数据,显示自定义头被过滤掉。

Without Range :
2013/04/16 04:08:22 [debug] 23457#0: *385 event timer del: 11: 1366110562151
2013/04/16 04:08:22 [debug] 23457#0: *385 event timer add: 11: 300000:1366110802151
2013/04/16 04:08:22 [debug] 23457#0: *385 http run request: "get_file?path=/Shared/Documents/loader.html"
2013/04/16 04:08:22 [debug] 23457#0: *385 http upstream check client, write event:1, "/v2_0/get_file"
2013/04/16 04:08:22 [debug] 23457#0: *385 http upstream recv(): -1 (11: Resource temporarily unavailable)
2013/04/16 04:08:22 [debug] 23457#0: *385 http upstream request: "/v2_0/get_file?path=/Shared/Documents/loader.html"
2013/04/16 04:08:22 [debug] 23457#0: *385 http upstream process header
2013/04/16 04:08:22 [debug] 23457#0: *385 malloc: 000000000E8621C0:32768
2013/04/16 04:08:22 [debug] 23457#0: *385 recv: fd:11 1229 of 32646
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy status 200 "200 OK"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Last-Modified: Tue, 16 Apr 2013 09:47:42 GMT"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Etag: 0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Date: Tue, 16 Apr 2013 11:08:22 GMT"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Server: CherryPy/3.1.2"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Connection: close"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Content-Disposition: attachment;filename="loader.html""
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $compressed
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $serve_decompressed
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $etag
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "Tue, 16 Apr 2013 09:47:42 GMT"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $last_modified
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "205"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $expected_size
2013/04/16 04:08:22 [debug] 23457#0: *385 http script complex value
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "205"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script set $actual_size
--
2013/04/16 04:08:22 [debug] 23457#0: *385 malloc: 000000000E906930:32768
2013/04/16 04:08:22 [debug] 23457#0: *385 posix_memalign: 000000000E90E940:4096 @16
2013/04/16 04:08:22 [debug] 23457#0: *385 recv: fd:11 350 of 32638
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy status 200 "200 OK"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Server: Apache-Coyote/1.1"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Accept-Ranges: bytes"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Content-Length: 205"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Date: Tue, 16 Apr 2013 11:08:22 GMT"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header: "Connection: close"
2013/04/16 04:08:22 [debug] 23457#0: *385 http proxy header done
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:08:22 [debug] 23457#0: *385 http script var: "Tue, 16 Apr 2013 09:47:42 GMT"
2013/04/16 04:08:22 [debug] 23457#0: *385 HTTP/1.1 200 OK
Server: nginx/1.0.4
Date: Tue, 16 Apr 2013 11:08:22 GMT
Content-Type: text/html;charset=ISO-8859-1
Connection: keep-alive
Content-Disposition: attachment;filename="loader.html"
Accept-Ranges: none
Content-Length: 205
Etag: 0853bce8-bf84-4cc4-9c7e-d4182bafafad
Last-Modified: Tue, 16 Apr 2013 09:47:42 GMT
=================================================================================

With Range :
2013/04/16 04:07:35 [debug] 23457#0: *373 event timer del: 11: 1366110515893
2013/04/16 04:07:35 [debug] 23457#0: *373 event timer add: 11: 300000:1366110755894
2013/04/16 04:07:35 [debug] 23457#0: *373 http run request: "/v2_0/get_file?path=/Shared/Documents/loader.html"
2013/04/16 04:07:35 [debug] 23457#0: *373 http upstream check client, write event:1, "/v2_0/get_file"
2013/04/16 04:07:35 [debug] 23457#0: *373 http upstream recv(): -1 (11: Resource temporarily unavailable)
2013/04/16 04:07:35 [debug] 23457#0: *373 http upstream request: "/v2_0/get_file?path=/Shared/Documents/loader.html"
2013/04/16 04:07:35 [debug] 23457#0: *373 http upstream process header
2013/04/16 04:07:35 [debug] 23457#0: *373 malloc: 000000000E8621C0:32768
2013/04/16 04:07:35 [debug] 23457#0: *373 recv: fd:11 1258 of 32646
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy status 200 "200 OK"
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy header: "Etag: 0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy header: "Date: Tue, 16 Apr 2013 11:07:35 GMT"
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy header: "Server: CherryPy/3.1.2"
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy header: "Connection: close"
2013/04/16 04:07:35 [debug] 23457#0: *373 http proxy header: "Content-Disposition: attachment;filename="loader.html""

2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $compressed
2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $serve_decompressed
2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script var: "0853bce8-bf84-4cc4-9c7e-d4182bafafad"
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $etag
2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script var: "Tue, 16 Apr 2013 09:47:42 GMT"
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $last_modified
2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script var: "205"
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $expected_size
2013/04/16 04:07:35 [debug] 23457#0: *373 http script complex value
2013/04/16 04:07:35 [debug] 23457#0: *373 http script var: "205"
2013/04/16 04:07:35 [debug] 23457#0: *373 http script set $actual_size
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy status 206 "206 Partial Content"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Server: Apache-Coyote/1.1"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Accept-Ranges: bytes"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Content-Range: bytes 10-20/205"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Content-Length: 11"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Date: Tue, 16 Apr 2013 11:05:18 GMT"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header: "Connection: close"
2013/04/16 04:05:18 [debug] 23457#0: *352 http proxy header done
2013/04/16 04:05:18 [debug] 23457#0: *352 HTTP/1.1 206 Partial Content
Server: nginx/1.0.4`enter code here`
Date: Tue, 16 Apr 2013 11:05:18 GMT
Content-Type: text/html;charset=ISO-8859-1
Connection: keep-alive
Content-Disposition: attachment;filename="loader.html"
Accept-Ranges: none
Content-Range: bytes 10-20/205
Content-Length: 11

你的回答都有

Accept-Ranges: none

表示服务器不支持范围请求。

参考:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

  Servers that do not accept any kind of range request for a
  resource MAY send
      Accept-Ranges: none
  to advise the client not to attempt a range request.

不知道你的nginx配置。因为只有http 1.1支持范围请求,我猜你可能错过了这个指令:

 proxy_http_version 1.1;
Nginx代理模块默认使用http 1.0。但是,如果您的上游服务器支持http 1.1(它应该),建议使用1.1以获得更好的性能。详见参考资料:http://wiki.nginx.org/HttpProxyModule#proxy_http_version

最新更新