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

时间:2013-04-18 06:04:02

标签: nginx

当我们希望通过X-redirect链传播Etag作为Range请求的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

1 个答案:

答案 0 :(得分:1)

你的两个回复都有

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