приложение) и сервер на vapor (внутри делает запросы на другой сервер), и 2 и 5 запросов на клиенте фейлятся по этой причине, то есть достаточно часто.
почитал - достаточно распространенная проблема (504),
пробую играть с
app.http.client.configuration.timeout
в правильном направлении смотрю? на что еще стоит обратить внимание в vapor проекте?
Стикер
сейчас посмотрим
Стикер
Там просто Vapor -> Nginx и все
Ну так Vapor -> Nginx
vapor client - имеете в виду iOS приложение?
Там же запрос делается с айос аппки, если я правильно понял
Я имел в виду app.http.client, т.е. AsyncHTTPClient, используемый в вапоре
А полная схема-то какая?
Смотрите в логах айос клиента, если есть на странице с ошибкой подпись nginx, то это в конфиге nginx нужно увеличить
да, есть на клиенте в конце ошибки такое: nginx/1.18.0 (Ubuntu)
Значит nginx правьте
Значит пока пробуйте с конфигом nginx
Vapor никогда не выдаст 504 сам, потому что он не знает, что выполняет роль proxy, даже если это фактически так, так что место возникновения ошибки 100% nginx.
Еще это может выдавать http запрос, если там try и клиент делает маппинг к реальному коду ошибки (но это вряд ли)
Это если server2 тоже nginx и он передает запрос еще куда-то дальше
в таком ключе? proxy_read_timeout 300; proxy_connect_timeout 300; proxy_send_timeout 300;
Ну или это просто заголовок Server: nginx, который всегда есть)
Лучше написать 30s
как телеграмм так шустро промаркировал код как nginx?)
так? proxy_read_timeout 30s; proxy_connect_timeout 30s; proxy_send_timeout 30s;
Да ну нет же. Чтобы выдать 504, выдаватель должен "осознавать" себя прокси. Вапор — набор отдельных компонент. Обработчик запроса понятия не имеет, что за код будет его обрабатывать, и будет ли выполняться исходящий запрос. Т.е. это только вручную закодить можно в обработчике. Вряд ли кто-то это будет делать специально. А nginx именно что знает, когда и какой запрос он проксирует, а когда — нет.
Но мы то не знаем что там в коде. У меня, к примеру, на запросах с другого сервера как раз стоит gatewayTimeout
Ну это же очевидное решение, нет?
И да, и нет. :) Ну типа если я прокси, и я не знаю особо, куда и зачем проксирую, мне сказали проксировать, вот я и проксирую — тогда если что не так, я выдам 504, типа, отвалите от меня, это вон там ошибка, мопед не мой. Например, балансировщик ничего другого и не выдаст, он понятия не имеет, кого и зачем балансирует. А если я ощущаю себя частью целого (продукта) и исходящий запрос, который я выполнил в интересах клиента, является запросом к микросервису, допустим — то я не выдам 504, я выдам что-то более конкретное и адекватное, имеющее отношение к продукту в целом. Иначе я буду напоминать плохо обученную девушку из техподдержки, которая на малейшие возмущения клиентов отвечает "чего вы на меня ругаетесь, я тут просто как девушка сижу, а не как сотрудник компании". :) Как-то так.
Обсуждают сегодня