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