Re: Проблемы с nginx в режиме proxy_pass с amazon и chrome/chromium

Konstantin Pavlov thresh на videolan.org
Вт Дек 13 07:23:22 UTC 2011


On Tue, Dec 13, 2011 at 10:22:16AM +0400, Sergey Budnevitch wrote:
> 
> On 13.12.2011, at 9:57, Konstantin Pavlov wrote:
> 
> > On Mon, Dec 12, 2011 at 10:31:46PM +0400, Алексей Сундуков wrote:
> >> "Не так" тут видимо google chrome. Не раз сталкивался с тем, что у
> >> него виденее того что и как нужно кэшировать и то, что работает как
> >> задумано в других браузерах не работает в хроме, причем даже
> >> принудительная зачистка кэша не спасает.
> >> 
> >> Видится мне, что если проблема проявляется только в хроне и ни каких
> >> других браузерах, то дело в хроме, а не nginx.
> > 
> > Безусловно.
> > 
> > Это однако не отменяет наличия проблемы и необходимости её решить.
> 
> 
> В хроме с помощью developers tools -> network посмотрите получает ли он этот
> mp3-файл вообще, какого размера, сравните с тем, что должно быть.
Когда ошибка проявляется, chrome делает 4 запроса, ниже следует copy&paste из developer tools/network:

1-ый запрос:

GET http://yo-fm-mp3.yo.fm/fa04ec7c59e6bdf27e04f0a3db9bdf92?t=39532&p=2056&po=337002 HTTP/1.1

1-ый ответ:

HTTP/1.1 0 undefined

2-ой запрос:

GET http://yo-fm-mp3.yo.fm/fa04ec7c59e6bdf27e04f0a3db9bdf92?t=39532&p=2056&po=337002 HTTP/1.1
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.5 Safari/535.2
Referer: http://yo.fm/
Range: bytes=0-

2-ой ответ:

HTTP/1.1 0 undefined

3-ий запрос:

GET /fa04ec7c59e6bdf27e04f0a3db9bdf92?t=39532&p=2056&po=337002 HTTP/1.1
Host: yo-fm-mp3.yo.fm
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.5 Safari/535.2
Accept: */*
Referer: http://yo.fm/
Accept-Language: ru-RU,en;q=0.8,en-US;q=0.6,ru;q=0.4
Accept-Charset: UTF-8,*;q=0.5
Cookie: __utma=223490707.1901084029.1319019904.1323693066.1323757632.12; __utmb=223490707.3.10.1323757632; __utmc=223490707; __utmz=223490707.1319019904.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)

3-ий ответ:

HTTP/1.1 200 OK
Server: nginx/0.8.55
Date: Tue, 13 Dec 2011 06:44:47 GMT
Content-Type: audio/mpeg
Connection: close
Accept-Ranges: bytes
Content-Length: 21165453
Expires: Tue, 20 Dec 2011 06:44:47 GMT
Cache-Control: max-age=604800

4-ый запрос:

GET http://yo-fm-mp3.yo.fm/fa04ec7c59e6bdf27e04f0a3db9bdf92?t=39532&p=2056&po=337002 HTTP/1.1
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.5 Safari/535.2
Referer: http://yo.fm/
Range: bytes=21165325-

4-ый ответ:

HTTP/1.1 0 undefined



При этом на первый запрос status в developer tools - "(pending)", на остальные "(canceled)". При третьем запросе скачалось при этом ~34 KB из 21165453 байт. (Content-length в третьем ответе правильный).


Далее случай когда mp3-шка скачивается нормально:

1-ый запрос:

GET http://yo-fm-mp3.yo.fm/dcc27468ccd029c31943ad16da657c9e?t=37460&p=2056&po=337002 HTTP/1.1

1-ый ответ:

HTTP/1.1 0 undefined

2-ой запрос:

GET http://yo-fm-mp3.yo.fm/dcc27468ccd029c31943ad16da657c9e?t=37460&p=2056&po=337002 HTTP/1.1
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.5 Safari/535.2
Referer: http://yo.fm/
Range: bytes=0-

2-ой ответ:

HTTP/1.1 0 undefined

3-ий запрос:

GET /dcc27468ccd029c31943ad16da657c9e?t=37460&p=2056&po=337002 HTTP/1.1
Host: yo-fm-mp3.yo.fm
Connection: keep-alive
Accept-Encoding: identity;q=1, *;q=0
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.5 Safari/535.2
Accept: */*
Referer: http://yo.fm/
Accept-Language: ru-RU,en;q=0.8,en-US;q=0.6,ru;q=0.4
Accept-Charset: UTF-8,*;q=0.5
Cookie: __utma=223490707.1901084029.1319019904.1323693066.1323757632.12; __utmc=223490707; __utmz=223490707.1319019904.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)


3-ий ответ:

HTTP/1.1 200 OK
Server: nginx/0.8.55
Date: Tue, 13 Dec 2011 07:03:18 GMT
Content-Type: audio/mpeg
Connection: close
Accept-Ranges: bytes
Content-Length: 5950780
Expires: Tue, 20 Dec 2011 07:03:18 GMT
Cache-Control: max-age=604800

4-го запроса не следует.

Видно, что в 4-м запросе chromium запрашивает последние 128 байт mp3-файла,
видимо хочет прочитать мета-данные.

Я проверил, что chromium всегда корректно скачивает файлы, в которых есть
ID3v1-тэг, но не всегда корректно скачивает те, где этого тэга нет. Однако при
запросе напрямую с amazon S3 файлы всегда воспроизводятся корректно.

> aws content-length отдает?

Отдаёт.

> Если раздавать эти же файлы напрямую nginx'ом проблема воспроизводится?

Нет. Также проблема не воспроизводится, если запросы делать напрямую на amazon s3.

-- 
Konstantin Pavlov
VideoLAN team



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