мой маршрут получает токены пользователей
GET /tokens
среднее время ответа составляет около 180 мс, а ответ - json. используя Flask + nginx.
некоторые запросы, содержимое ответа усекается примерно до 33 КБ, поэтому JSON искажен. на некоторые запросы, с те же параметры, почти на уровне то же время, ответ нормальный, около 216 КБ.
Мой вопрос: почему это происходит и почему это происходит несогласованно?
вот код ответа колбы
class NormalResponse(Response):
def __init__(self, response):
super(NormalResponse, self).__init__(response, 200)
res = json.dumps(paginator.paginate(tokens))
return NormalResponse(res)
Я обнаружил проблему, связанную с nginx, поскольку в неудачных ответах есть эти журналы
2018/12/18 16:35:17 [crit] 16#16: *95010 open() "/var/tmp/nginx/uwsgi/1/42/0000000421" failed (13: Permission denied) while reading upstream, client: 172.31.72.76, server: , request: "GET /tokens?limit=501&offset=0&order=desc&owner_id=11111 HTTP/1.1", upstream: "uwsgi://unix:/run/server.socket:", host: "oauth.dev.bla_bla.com"
Похоже, что ответ переполняется proxy_buffers и пытается временно сохранить его в proxy_temp_path, и ваше сообщение об ошибке вполне подтверждает это. Вы должны проверить права доступа к файлам пользователя nginx в этой папке.
Полагаю, потому что nginx сохраняет на диск не все запросы, а только их часть (огромные?).
Но один и тот же запрос с примерно таким же размером ответа и теми же параметрами отправляется иногда с ошибкой, а иногда с ошибкой.
Эта проблема была решена добавлением
RUN chown -R www-data:www-data /var/tmp/nginx
к Dockerfile
если это связано с разрешениями, то почему не все запросы терпят неудачу, а только их часть?