Назад | Перейти на главную страницу

nginx завершает соединение после 65 КБ

У меня nginx настроен как интерфейс для приложения Python, работающего под управлением Gunicorn, но nginx завершает соединения после того, как было отправлено около 65 КБ данных.

Например, у меня есть представление, которое выглядит так:

def debug_big_file(request):
    return HttpResponse("x" * 500000)

Но когда я обращаюсь к этому URL через nginx, я получаю только 65283 байта:

$ curl https://example.com/debug/big-file | wc
…
curl: (18) transfer closed with outstanding read data remaining
   0       1   65283

Обратите внимание, что при прямом доступе к Gunicorn все работает, как ожидалось:

$ curl http://localhost:1234/debug/big-file | wc
…
   0       1   500000

Соответствующий конфиг nginx:

location / {
    proxy_pass http://localhost:1234/;
    proxy_redirect off;
    proxy_headers_hash_bucket_size 96;
}

И nginx версии 1.7.0

Еще несколько фактов:

Ладно! После двойной проверки логов nginx выяснилось, что это проблема:

2014/05/26 16:50:56 [crit] 31396#0: *11 open() "…/proxy_temp/2/00/0000000002" failed (13: Permission denied) while reading upstream, client: 1.2.3.4, server: _, request: "GET /debug/big-file HTTP/1.1", upstream: "http://127.0.0.1:1234/debug/big-file", host: "example.com"

Каким-то образом разрешения для proxy_temp каталог испортился, что помешало nginx правильно буферизовать его.