ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re[2]: циклический ресет при закачке файлов



On Tue, 31 Mar 2009, Vladimir Fursin wrote:

Tuesday, March 31, 2009, 10:13:53 AM, you wrote:

On Tue, 31 Mar 2009, Vladimir Fursin wrote:

Здравствуйте!

Для раздачи мультимедийного контента используется следующая
конфигурация - nginx в режиме прокси + апач, выполняющий
в PHP задачу авторизации. Если авторизация успешна, управление
возвращается в nginx, который через internal location отдает файл
клиенту.
       Просматривая логи nginx обнаружил многократно повторяющиеся
записи скачивания с одного и того же URL, одним и тем же клиентским
IP, одной и той же длины. Пример :

2009-03-29T04:49:00+0300 XX.XX.XX.XX - - [29/Mar/2009:04:48:59
+0300] "GET /fetch/mp3/hch...Wbg==/kreschenie.mp3 HTTP/1.1" 200 33396
"Mozilla/4.0(compatible; MSIE 5.00; Windows 98)"

Такого вида записи в логах повторяются с интервалом 1-2 сек и
могут составлять до 30% всех записей лога! С одного и того же
клиентского адреса такие повторяющиеся запросы могут идти сутками.
Причем это не один клиент, таких много - с разных сетей при доступе
на сервера в разных городах, т.е. явление массовое.

Пытался смотреть на то, что происходит, tcpdump'ом - видно, что
после клиентского GET-запроса сервер отвечает HTTP-заголовком,
начинает передавать содержимое файла и после второго посланного
пакета клиент присылает FIN и RST, после чего все повторяется заново.

Владимир,

а чего же вы tcpdump не прислали - он бы сильно помог раобраться что там у
вас происходит.

Ещё понадобится error.log от nginx c debug'ом проблемного соединения.

tcpdump:
12:53:40.706993 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: S 
1702467945:1702467945(0) win 65535 <mss 1452,nop,nop,sackOK>
E..0J.@.}...].Br.....c.Pey.i....p...S...........
12:53:40.707023 IP mass.example.com.http > XX.XX.XX.XX.bmc-ea: S 
1304190803:1304190803(0) ack 1702467946 win 5840 <mss 1460,nop,nop,sackOK>
E..0..@.@.......].Br.P.cM._Sey.jp...............
12:53:40.724599 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: . ack 1 win 65535
E..(J   @.}...].Br.....c.Pey.jM._TP....2........
12:53:40.821980 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: P 1:545(544) ack 
1 win 65535
E..HJ.@.}...].Br.....c.Pey.jM._TP.......GET 
/fetch/mp3/435sePBm3kIMjjqen4jQSBLgCvZ
12:53:40.822002 IP mass.example.com.http > XX.XX.XX.XX.bmc-ea: . ack 545 win 
6528
E..(..@.@.......].Br.P.cM._Tey..P.......
12:53:40.825764 IP mass.example.com.http > XX.XX.XX.XX.bmc-ea: P 1:233(232) ack 
545 win 6528
E.....@.@.......].Br.P.cM._Tey..P..."...HTTP/1.1 200 OK
Server: nginx/0.6.35
Dat
12:53:40.825784 IP mass.example.com.http > XX.XX.XX.XX.bmc-ea: . 233:1685(1452) 
ack 545 win 6528
E.....@.@..C....].Br.P.cM.`<ey..P...'...RIFF..).AVI 
LIST~"..hdrlavih8.............
12:53:40.845192 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: . ack 1685 win 
65535
E..(J.@.}...].Br.....c.Pey..M.e.P....~........
12:53:40.845208 IP mass.example.com.http > XX.XX.XX.XX.bmc-ea: . 
1685:6041(4356) ack 545 win 6528
E..,..@.@.......].Br.P.cM.e.ey..P...3.............................................
12:53:40.846384 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: F 545:545(0) ack 
1685 win 65535
E..(J^M@.}...].Br.....c.Pey..M.e.P....}........
12:53:40.864201 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: R 546:546(0) ack 
3137 win 0
E..(J.@.}...].Br.....c.Pey..M.k.P.............

Я вижу, что RST посылает клиент "XX.XX.XX.XX.bmc-ea".

12:53:40.864220 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: R 
1702468490:1702468490(0) win 0
E..(J...}...].Br.....c.Pey..ey..P...}+........
12:53:40.866103 IP XX.XX.XX.XX.bmc-ea > mass.example.com.http: R 
1702468490:1702468490(0) win 0
E..(J...}...].Br.....c.Pey..ey..P...}+........


debug_log:
2009/03/31 12:53:40 [info] 27545#0: *8559903 client closed prematurely 
connection while sending response to client, client: XX.XX.XX.XX, server: 
download
.example.com, request: "GET 
/fetch/mp3/435sePBm3kIMjjqen4jQSBLgCvZGpgBojLtzIQQl5EKMIAXS4jUL6x9X4CUrWJFUlmkxwRXctR4WvfwPQpAa98s5Wgta0UIUlnterb++TUjtTHFVxFcRVL
N7
bYG5wV-8+4SuGOc6x56COMgJ-s-gqOO1TuwjaOo4RX7gLPM9ai2XZO4A-88bXvZZFpMcwYAQ/battlestar_galactica_season_3_%5Bru%5D_part009.avi
 HTTP/1.1", upstream: "http://127.0
.0.1:8888/nginx.php?path=XX.XX.XX.XX-435sePBm3kIMjjqen4jQSBLgCvZGpgBojLtzIQQl5EKMIAXS4jUL6x9X4CUrWJFUlmkxwRXctR4WvfwPQpAa98s5Wgta0UIUlnterb%2b
 %2bTUjtTHFVxFc
RVLN7bYG5wV-8%2b4SuGOc6x56COMgJ-s-gqOO1TuwjaOo4RX7gLPM9ai2XZO4A-88bXvZZFpMcwYAQ/battlestar_galactica_season_3_[ru]_part009.avi",
 host: "download.example.c
om
", referrer: "http://video.example.com/browse/series/ru/10364.html";

Это не дебаг - это у вас обычный error.log

Вам надо
- собрать nginx с опцией --with-debug
- добавить в конфиг волшебное слово
  debug_connection XX.XX.XX.XX.bmc-ea;
  (возможно, понадобится ручками разрешить имя и вписать адрес)

Тогда в логе вы увидите примерно такое:

kaa@dl2$ grep --text debug /logs/error.log |head
2009/03/31 13:45:07 [debug] 12244#0: *121 accept: 194.85.1.2 fd:20
2009/03/31 13:45:07 [debug] 12244#0: *121 event timer add: 20: 60000:1542186691
2009/03/31 13:45:07 [debug] 12244#0: *121 kevent set event: 20: ft:-1 fl:0025
2009/03/31 13:45:07 [debug] 12244#0: *121 kevent: 20: ft:-1 fl:0020 ff:00000000 
d:671 ud:081520B5
2009/03/31 13:45:07 [debug] 12244#0: *121 post event 081520B4
2009/03/31 13:45:07 [debug] 12244#0: *121 delete posted event 081520B4
2009/03/31 13:45:07 [debug] 12244#0: *121 malloc: 080CD800:640
2009/03/31 13:45:07 [debug] 12244#0: *121 malloc: 080CDC00:1024
2009/03/31 13:45:07 [debug] 12244#0: *121 malloc: 080C9000:4096
2009/03/31 13:45:07 [debug] 12244#0: *121 http process request line
kaa@dl2$


--
Best regards,
Andrew Kopeyko <kaa@xxxxxxxx>




 




Copyright © Lexa Software, 1996-2009.