Re: Проксирование изображений через Nginx в Flash.

Валентин Бартенев vbart at nginx.com
Sat Jan 19 23:09:01 UTC 2013


On Saturday 19 January 2013 16:02:01 somebi wrote:
> Как вы тогда объясните то, что через google chrome, без флеша картинки
> проксируются без проблем?

В HTTP/1.x запросе помимо строки запроса и тела бывают ещё заголовки. Об этом вы 
можете узнать, например, из RFC 2616 ( http://tools.ietf.org/html/rfc2616 ).

В частности, когда вы открываете картинку в хроме напрямую, то такой заголовок 
как "Referer" он обычно не посылает.

Именно на этот заголовок указанный в логе сервер (на который вы проксируете 
запрос) реагирует таким вот образом (отдает 503 вместо картинки), в чем не 
трудно убедиться.

Простой запрос:

% telnet ns223506.ovh.net 80
Trying 46.105.113.99...
Connected to ns223506.ovh.net.
Escape character is '^]'.
GET /rozne/001017635f42c3ca1bac9f0e7e2d4ac7/wallpaper-2584886.jpg HTTP/1.0
Host: ns223506.ovh.net

HTTP/1.1 200 OK
Server: nginx/1.1.1
Date: Sat, 19 Jan 2013 22:18:32 GMT
Content-Type: image/jpeg
Content-Length: 782444
Last-Modified: Sat, 12 Jan 2013 15:34:54 GMT
Connection: close
Expires: Thu, 31 Dec 2037 23:55:55 GMT
Cache-Control: max-age=315360000
Accept-Ranges: bytes

[...]

И с "Referer" в запросе:

% telnet ns223506.ovh.net 80
Trying 46.105.113.99...
Connected to ns223506.ovh.net.
Escape character is '^]'.
GET /rozne/001017635f42c3ca1bac9f0e7e2d4ac7/wallpaper-2584886.jpg HTTP/1.0
Host: ns223506.ovh.net
Referer: http://example.com/

HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx/1.1.1
Date: Sat, 19 Jan 2013 22:18:57 GMT
Content-Type: text/html
Content-Length: 212
Connection: close

<html>
<head><title>503 Service Temporarily Unavailable</title></head>
<body bgcolor="white">
<center><h1>503 Service Temporarily Unavailable</h1></center>
<hr><center>nginx/1.1.1</center>
</body>
</html>
Connection closed by foreign host.


Возможно, что не на любое значение "Referer" такая реакция. Не исключено,
что такую защиту сделали специально.

В приведенном же вами логе видно, что на nginx пришел запрос с заголовком 
"Referer", который nginx честно передал дальше и получил 503 в ответ.

Указание nginx не передавать заголовок "Referer":

  proxy_set_header referer "";

решило бы вашу проблему.

Документация:
http://nginx.org/r/proxy_set_header/ru


> 
> В общем я плюнул на эту затею и написал свой прокси сервер. Теперь все
> отлично работает. Так что разбирайтесь там, а то теряете доверие... Мне
> сидеть и разбираться по 5 часов, в чем же причина как-то еще раз не
> хочеться...
> 

--
Валентин Бартенев
http://nginx.com/support.html
http://nginx.org/en/donation.html


Подробная информация о списке рассылки nginx-ru