499 request has been forbidden by antivirus что это
Описание ошибки передается в параметре error . Данный параметр содержит код ошибки (параметр code ) и краткое описание ошибки (параметр message ).
Elaboration
Here I will assume that the reader knows as little as I did when I started playing around.
My setup was a reverse proxy, the nginx server, and an application server, the uWSGI server behind it. All requests from the client would go to the nginx server, then forwarded to the uWSGI server, and then response was sent the same way back. I think this is how everyone uses nginx/uwsgi and are supposed to use it.
My nginx worked as it should, but something was wrong with the uwsgi server. There are two ways (maybe more) in which the uwsgi server can fail to respond to the nginx server.
1) uWSGI says, "I'm processing, just wait and you will soon get a response". nginx has a certain period of time, that it is willing to wait, fx 20 seconds. After that, it will respond to the client, with a 504 error.
2) uWSGI is dead, or uWSGi dies while nginx is waiting for it. nginx sees that right away and in that case, it returns a 499 error.
I was testing my setup by making requests in the client (browser). In the browser nothing happened, it just kept hanging. After maybe 10 seconds (less than the timeout) I concluded that something was not right (which was true), and closed the uWSGI server from the command line. Then I would go to the uWSGI settings, try something new, and then restart the uWSGI server. The moment I closed the uWSGI server, the nginx server would return a 499 error.
So I kept debugging with the 499 erroe, which means googling for the 499 error. But if I had waited long enough, I would have gotten the 504 error. If I had gotten the 504 error, I would have been able to understand the problem better, and then be able to debug.
So the conclusion is, that the problem was with uWGSI, which kept hanging ("Wait a little longer, just a little longer, then I will have an answer for you. ").
How I fixed that problem, I don't remember. I guess it could be caused by a lot of things.
How did you end up solving this? I am having the same issue and haven't been able to pin down the cause.
@Shafiul: My elaboration does not explain what caused the problem with uWSGI, it simply explains that uWSGI was the cause (and not nginx). The elaboration describes the symptoms and how I misinterpreted these. I understand your disappointment, but you have misunderstood the essence of my answer. Sincerely.
Extremely useful answer, never delete! These concepts should be fleshed out in the documentation somewhere, you do a great service by elaborating how it behaves differently than the docs would imply!
The "client" in "client closed the connection" isn't necessarily the Web browser!
You may find 499 errors in an Nginx log file if you have a load balancing service between your users and your Nginx -- using AWS or haproxy. In this configuration the load balancer service will act as a client to the Nginx server and as a server to the Web browser, proxying data back and forth.
For haproxy the default values for certain applicable timeouts are some 60 seconds for connecting to upstream and for reading from upstream (Nginx) or downstream (Web browser).
Timeouts might happen for busy websites or scripts that need more time for execution. You may need to find a timeout value that will work for you. For example extending it to a larger number, like 180 seconds. That may fix it for you.
Thank you very much, you saved my day :'(. I spent many days to solve this problem. my problem's related to the timeout in haproxy . I never realize that
As you point 499 a connection abortion logged by the nginx. But usually this is produced when your backend server is being too slow, and another proxy timeouts first or the user software aborts the connection. So check if uWSGI is answering fast or not of if there is any load on uWSGI / Database server.
In many cases there are some other proxies between the user and nginx. Some can be in your infrastructure like maybe a CDN, Load Balacer, a Varnish cache etc. Others can be in user side like a caching proxy etc.
If there are proxies on your side like a LoadBalancer / CDN . you should set the timeouts to timeout first your backend and progressively the other proxies to the user.
I'll recommend you to set:
- n seconds to uWSGI timeout
- n+1 seconds to nginx timeout
- n+2 senconds to timeout to Load Balancer
- n+3 seconds of timeout to the CDN.
If you can't set some of the timeouts (like CDN) find whats is its timeout and adjust the others according to it ( n , n-1 . ).
This provides a correct chain of timeouts. and you'll find really whose giving the timeout and return the right response code to the user.
Turns out 499's really does mean "client interrupted connection."
I had a client "read timeout" setting of 60s (and nginx also has a default proxy_read_timeout of 60s). So what was happening in my case is that nginx would error.log an upstream timed out (110: Connection timed out) while reading upstream and then nginx retries "the next proxy server in the backend server group you configured." That's if you have more than one.
Then it tries the next and next till (by default) it has exhausted all of them. As each one times out, it removes them from the list of "live" backend servers, as well. After all are exhausted, it returns a 504 gateway timeout.
So in my case nginx marked the server as "unavailable", re-tried it on the next server, then my client's 60s timeout (immediately) occurred, so I'd see a upstream timed out (110: Connection timed out) while reading upstream log, immediately followed by a 499 log. But it was just timing coincidence.
If all servers in the group are marked as currently unavailable, then it returns a 502 Bad Gateway. for 10s as well. See here max_fails and fail_timeout. Inn the logs it will say no live upstreams while connecting to upstream.
If you only have one proxy backend in your server group, it just try's the one server, and returns a 504 Gateway Time-out and doesn't remove the single server from the list of "live" servers, if proxy_read_timeout is surpassed. See here "If there is only a single server in a group, max_fails, fail_timeout and slow_start parameters are ignored, and such a server will never be considered unavailable."
The really tricky part is that if you specify proxy_pass to "localhost" and your box happens to also have ipv6 and ipv4 "versions of localhost" on it at the same time (most boxes do by default), it will count as if you had a "list" of multiple servers in your server group, which means you can get into the situation above of having it return "502 for 10s" even though you list only one server. See here "If a domain name resolves to several addresses, all of them will be used in a round-robin fashion." One workaround is to declare it as proxy_pass http://127.0.0.1:5001; (its ipv4 address) to avoid it being both ipv6 and ipv4. Then it counts as "only a single server" behavior.
There's a few different settings you can tweak to make this "less" of a problem. Like increasing timeouts or making it so it doesn't mark servers as "disabled" when they timeout. or fixing the list so it's only size 1, see above :)
Ошибка 403 (Forbidden, доступ запрещен) может возникнуть по одной из нескольких причин:
Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла) .
Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.
Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.
Кроме того, ошибка 403 может возникать при переносе домена с одного акаунта в системе «Джино» на другой. В этом случае надо просто немного подождать — необходимо время на обновление кэша DNS.
Если вы считаете, что все правила, приведенные выше, соблюдены, но ошибка 403 все равно возникает, обратитесь в техподдержку.
Убрать никак. Только администратор сервера/сайта может открыть или закрыть вам доступ к сайту. Обратитесь к нему.
Убрать никак. Только администратор сервера/сайта может открыть или закрыть вам доступ к сайту. Обратитесь к нему.
Проблемы с функционалом самого сайта (вашей вины здесь нет); Провайдер по каким-либо причинам закрыл доступ к данному сайту (например, в связи с предписанием Роскомнадзора); Обычный сбой работы компьютера; Вас заблокировали (забанили) на данном ресурсе по каким-либо причинам (временно или навсегда); Проблемы с функционалом вашего браузера (ошибки кэша, куки и так далее); Вы неверно набрали адрес сайта или его страницы (например, ошиблись на одну букву, использовали заглавную букву вместо обычной, неправильно указали расширение сайта и так далее)
Ошибка у Вебмастера Если вы администратор сайта и вас интересует причины появления 403 forbidden, тогда рекомендую обратить внимание на следующие детерминанты:
Вы используете некорректный файл главной страницы (index), то есть он повреждён, отсутствует, или неверное модифицирован (неправильное имя); Некорректные права на папку, содержимое которой запрашивается пользователем, вследствие чего, к примеру, вебмастер может просматривать её без проблем, а обычному пользователю доступ к ней закрыт; Неверно указан путь к требуемому файлу (он находится в другой папке или вообще отсутствует); DNS-кэш не успел обновиться при смене хостинга вашего сайта (для осуществления данной операции может понадобиться около суток); Запрещён просмотр содержимого какого-либо каталога в файле .htaccess или в самой конфигурации сервера. Надеюсь вы поняли что это 403 forbidden, теперь разберём как её устранить.
Проверьте правильность ввода ссылки на нужный ресурс (или его страницу). Написание каждой буквы имеет существенное значение; Очистите кэш и куки вашего браузера; Попробуйте использовать другой браузер (например, вместо Хром используйте Мозиллу);
Описание ошибок
Запрос выполнен успешно.
Запрос выполнен частично.
Неверны авторизационные данные, указанные в запросе, или запрещен доступ к запрашиваемому ресурсу.
Запрашиваемый ресурс не найден.
Method Not Allowed
Запрашиваемый метод для указанного ресурса не поддерживается.
Unsupported Media Type
Запрашиваемый тип контента не поддерживается методом.
Enhance Your Calm
Превышено ограничение на доступ к ресурсу.
Internal Server Error
Внутренняя ошибка сервера. Попробуйте вызвать метод через некоторое время. При повторении ошибки обратитесь в службу технической поддержки Маркета.
Сервер временно недоступен из-за высокой загрузки. Попробуйте вызвать метод через некоторое время.
Запрос выполнен успешно.
Запрос выполнен частично.
Неверны авторизационные данные, указанные в запросе, или запрещен доступ к запрашиваемому ресурсу.
Запрашиваемый ресурс не найден.
Method Not Allowed
Запрашиваемый метод для указанного ресурса не поддерживается.
Unsupported Media Type
Запрашиваемый тип контента не поддерживается методом.
Enhance Your Calm
Превышено ограничение на доступ к ресурсу.
Internal Server Error
Внутренняя ошибка сервера. Попробуйте вызвать метод через некоторое время. При повторении ошибки обратитесь в службу технической поддержки Маркета.
Сервер временно недоступен из-за высокой загрузки. Попробуйте вызвать метод через некоторое время.
Краткое описание ошибки в ответе
Для ошибки 400 Bad Request :
Способ возможного решения
Collection of field must not be empty
Параметр не должен быть пустым.
Укажите хотя бы один элемент для параметра.
Указан некорректный статус.
Проверьте корректность передаваемого статуса для фильтрации заказов по статусу.
В формате JSON-данных содержится ошибка.
Проверьте корректность JSON-формата данных, передаваемых в теле запроса.
Не указан обязательный параметр.
Укажите значение для обязательного параметра.
The request is too big
Уменьшите размер запроса, сократив количество передаваемых данных.
Указан слишком большой диапазон дат. Максимальный диапазон — maxPeriod .
Сократите диапазон дат для фильтрации заказов по дате.
Проверьте кодировку тела запроса. Требуемая кодировка — UTF-8.
Unexpected end of content
Тело запроса неожиданно завершается.
Проверьте корректность формата данных, передаваемых в теле запроса.
Value / length of field (value) must be between min and max [exclusively]
Значение (длина) параметра должно быть между значениями min и max и не равно им.
Проверьте корректность значения параметра.
Value / length of field (value) must be greater / less than [or equal to] limit
Значение (длина) параметра должно быть равно либо больше (меньше) указанного значения limit .
Проверьте корректность значения параметра.
Задана слишком высокая точность для параметра.
Задайте значения параметра с меньшей точностью.
Значение параметра должно соответствовать регулярному выражению.
Проверьте корректность значения параметра.
В формате XML-данных содержится ошибка.
Проверьте корректность XML-формата данных, передаваемых в теле запроса.
Способ возможного решения
Collection of field must not be empty
Параметр не должен быть пустым.
Укажите хотя бы один элемент для параметра.
Указан некорректный статус.
Проверьте корректность передаваемого статуса для фильтрации заказов по статусу.
В формате JSON-данных содержится ошибка.
Проверьте корректность JSON-формата данных, передаваемых в теле запроса.
Не указан обязательный параметр.
Укажите значение для обязательного параметра.
The request is too big
Уменьшите размер запроса, сократив количество передаваемых данных.
Указан слишком большой диапазон дат. Максимальный диапазон — maxPeriod .
Сократите диапазон дат для фильтрации заказов по дате.
Проверьте кодировку тела запроса. Требуемая кодировка — UTF-8.
Unexpected end of content
Тело запроса неожиданно завершается.
Проверьте корректность формата данных, передаваемых в теле запроса.
Value / length of field (value) must be between min and max [exclusively]
Значение (длина) параметра должно быть между значениями min и max и не равно им.
Проверьте корректность значения параметра.
Value / length of field (value) must be greater / less than [or equal to] limit
Значение (длина) параметра должно быть равно либо больше (меньше) указанного значения limit .
Проверьте корректность значения параметра.
Задана слишком высокая точность для параметра.
Задайте значения параметра с меньшей точностью.
Значение параметра должно соответствовать регулярному выражению.
Проверьте корректность значения параметра.
В формате XML-данных содержится ошибка.
Проверьте корректность XML-формата данных, передаваемых в теле запроса.
Для ошибки 401 Unauthorized :
Способ возможного решения
Unsupported authorization type specified in Authorization header
Authorization header has invalid syntax
OAuth credentials are not specified
Проверьте корректность авторизационных данных.
OAuth token is not specified
В запросе не указан авторизационный токен (параметр oauth_token ).
OAuth client id is not specified
В запросе не указан идентификатор приложения (параметр oauth_client_id ).
Способ возможного решения
Unsupported authorization type specified in Authorization header
Authorization header has invalid syntax
OAuth credentials are not specified
Проверьте корректность авторизационных данных.
OAuth token is not specified
В запросе не указан авторизационный токен (параметр oauth_token ).
OAuth client id is not specified
В запросе не указан идентификатор приложения (параметр oauth_client_id ).
Для ошибки 403 Forbidden :
Способ возможного решения
Доступ к указанному ресурсу запрещен.
Проверьте правильность указания ресурса, а также наличие прав доступа к нему у пользователя, чей авторизационный токен используется в запросе.
Access to API denied for the client / campaign
Доступ к партнерскому API для клиента или магазина запрещен.
Клиенты агентств должны обратиться к своему агентству по вопросу предоставления доступа к партнерскому API.
Client id is invalid
Указанный идентификатор приложения (параметр oauth_client_id ) невалидный.
Проверьте корректность авторизационных данных. Если они верны, получите новый идентификатор для приложения, повторите запрос с новыми авторизационными данными.
Scope is invalid
Указанный авторизационный токен (параметр oauth_token ) не обладает необходимым набором прав.
Получите новый авторизационный токен, указав при получении право использования партнерского API; повторите запрос с новыми авторизационными данными.
Token is invalid
Указанный авторизационный токен (параметр oauth_token ) невалидный.
Проверьте корректность авторизационных данных. Если они верны, получите новый авторизационный токен, повторите запрос с новыми авторизационными данными.
User account is disabled
Учетная запись пользователя, для которого выдан указанный авторизационный токен, заблокирована.
Я получаю много кодов ошибок 499 NGINX. Я вижу, что это проблема на стороне клиента. Это не проблема NGINX или моего стека uWSGI. Я отмечаю корреляцию в журналах uWSGI при получении 499.
Я ищу более подробное объяснение и надеюсь, что с моей конфигурацией NGINX для uwsgi все в порядке. Я принимаю это за чистую монету. Похоже, проблема клиента.
Я знаю, что это очень старый вопрос, но количество неуместных вопросов по SO ошеломляет. Это явно относится к SF.
В качестве особого случая я заметил, что иногда это происходит, когда конечный пользователь дважды нажимает кнопку отправки формы. Форма отправляется дважды, но клиент ожидает только одного ответа. Это можно обойти, отключив (хотя бы на несколько секунд) кнопки в JS при первом нажатии на них.
Важно отметить, что «клиент» на самом деле может быть прокси. Например, если вы используете балансировщик нагрузки, он может отменить запрос к серверу nginx из-за тайм-аута.
Это происходит в моем приложении Angular, если пользователь закрывает вкладку и мои запросы API не выполняются.
Важно отметить, что это также может быть вызвано сервером ; если сервер слишком долго отвечает, клиент сдается.
В моем случае я был нетерпеливым и в итоге неправильно истолковал журнал.
Фактически, настоящая проблема заключалась во взаимодействии между nginx и uwsgi, а не между браузером и nginx. Если бы я загрузил сайт в свой браузер и достаточно долго ждал, я бы получил «504 - Bad Gateway». Но это заняло так много времени, что я продолжал пробовать разные вещи, а затем обновлялся в браузере. Поэтому я никогда не ждал достаточно долго, чтобы увидеть ошибку 504. При обновлении в браузере, то есть когда предыдущий запрос закрывается, и Nginx записывает это в журнал как 499.
Forum
Не удаётся подключить VPN
file C:\ProgramData\Kaspersky Lab\AVP21.3\Report\g_objdt.dat 1 giga
g_objdt.dat taking up 1.16 GB of RAM
Request to Scan My Website and Provide Your Verified Badge on the Search Engines
Hello @Nesell, Welcome! Read: Kaspersky Security Network: Grey icon in search results Scan the sites using Kaspersky Threat Intelligence Portal & select Submit to reanalyze, fill in the popup with your email address & ask the Virus lab to add the site to KSN, select Send. Thank you🙏, Flood🐳+🐋
Релиз Kaspersky Endpoint Security 11.9.0.351
Создавал запрос в СА по этому же вопросу. Ответили так: Так что продолжаем ждать. Кому сильно нужно - заводите новые вопросы в СА, можно со ссылкой на мой INC000014061230. Возможно, количество запросов повлияет на сроки
Request to Scan My Website and Provide Your Verified Badge on the Search Engines
Dear Kaspersky, I am using your amazing services from more than 5 years. Kind request to scan our website and provide the verified badge on the search engines. Website url: [Removed] Kindly do the needful. Warm Regards
O antivírus kaspersky não bloqueou o vírus que transformou tudo em .NUHB
José, sinto muito, mas saiba que sempre surgirão novas ameaças. Não há sistema existente que nos proteja de todas as ameaças, pois a cada dia surgem novas. Uma ameaça só pode ser detectada se tiver comportamentos semelhantes a outras ameaças ou constar no banco de dados da Kaspersky. Por favor, não pare de usar os produtos Kaspersky apenas por isso. Sou um cliente, assim como você, e não há software superior atualmente no mercado. Tome os devidos cuidados, cautelas e seja uma camada ativa da segurança de seus dados. Faça sua parte e eles farão as deles.
Obrigado Kaspersky
Mais uma vez adquiri o software de segurança da Kaspersky, o melhor antivírus do mundo. Este post foi criado para parabenizar o sucesso desta maravilhosa empresa que tanto ajuda seus clientes. Obrigado Kaspersky, por existir, por proteger nossos equipamentos, nossas informações, de todos os males presentes na internet. Continue existindo e nós, continuaremos a adquirir seus produtos, que, de costume, possuem extrema qualidade. Ah, e não poderia esquecer dos nossos queridíssimos suportes, que nos auxiliam sempre com extrema rapidez e simpatia. Viva Kaspersky.
I'm getting a lot of 499 NGINX error codes. I see that this is a client side issue. It is not a problem with NGINX or my uWSGI stack. I note the correlation in uWSGI logs when a get a 499.
I'm looking for a more in depth explanation and hoping it is nothing wrong with my NGINX config for uwsgi. I'm taking it on face value. It seems like a client issue.
16 Answers 16
As a special case, I noticed it sometimes happen when the end-user double-clicks a form submit button. The form is sent twice, but only one response is expected by the client. This can be worked around by disabling (at least for a few seconds) buttons in JS the first time they get clicked.
It's important to note that the "client" might actually be a proxy. For example, if you're using a load balancer, it might cancelling the request to the nginx server due to a timeout.
Important to note that this can also be caused by the server; if the server takes too long to respond, the client gives up.
In my case, I was impatient and ended up misinterpreting the log.
In fact, the real problem was the communication between nginx and uwsgi, and not between the browser and nginx. If I had loaded the site in my browser and had waited long enough I would have gotten a "504 - Bad Gateway". But it took so long, that I kept trying stuff, and then refresh in the browser. So I never waited long enough to see the 504 error. When refreshing in the browser, that is when the previous request is closed, and Nginx writes that in the log as 499.
разработка
Здесь я предполагаю, что читатель знает так же мало, как и я, когда начал экспериментировать.
Моя установка была обратным прокси, сервером nginx и сервером приложений, сервером uWSGI за ним. Все запросы от клиента будут поступать на сервер nginx, затем перенаправляются на сервер uWSGI, а затем ответ отправляется таким же образом обратно. Я думаю, что именно так все используют nginx / uwsgi и должны его использовать.
Мой nginx работал как надо, но что-то не так с сервером uwsgi. Есть два способа (а может и больше), при которых сервер uwsgi может не отвечать серверу nginx.
1) uWSGI говорит: «Я обрабатываю, просто подождите, и вы скоро получите ответ». У nginx есть определенный период времени, в течение которого он готов ждать, fx 20 секунд. После этого он ответит клиенту с ошибкой 504.
2) uWSGI мертв, или uWSGi умирает, пока nginx его ждет. nginx видит это сразу и в этом случае возвращает ошибку 499.
Я тестировал свою установку, делая запросы в клиенте (браузере). В браузере ничего не происходило, просто все зависало. Примерно через 10 секунд (меньше таймаута) я пришел к выводу, что что-то не так (что было правдой), и закрыл сервер uWSGI из командной строки. Затем я бы пошел в настройки uWSGI, попробовал что-то новое, а затем перезапустил сервер uWSGI. В тот момент, когда я закрою сервер uWSGI, сервер nginx вернет ошибку 499.
Поэтому я продолжил отладку с ошибкой 499, что означает поиск ошибки 499 в Google. Но если бы я подождал достаточно долго, то получил бы ошибку 504. Если бы я получил ошибку 504, я смог бы лучше понять проблему, а затем отладить.
Таким образом, можно сделать вывод, что проблема была в uWGSI, который продолжал зависать («Подождите еще немного, еще немного, тогда я дам вам ответ . »).
Как я решил эту проблему, не помню. Думаю, это могло быть вызвано множеством причин.
Просто хотел сказать спасибо! У меня была точно такая же ситуация, и это поставило меня на правильный путь.
@Shafiul: Моя разработка не объясняет, что вызвало проблему с uWSGI, а просто объясняет, что причиной была uWSGI (а не nginx). В разработке описаны симптомы и то, как я их неверно истолковал. Я понимаю ваше разочарование, но вы неправильно поняли суть моего ответа. Искренне.
Чрезвычайно полезный ответ, никогда не удаляйте! Эти концепции следует где-то конкретизировать в документации, вы окажете большую услугу, подробно объяснив, как она ведет себя иначе, чем это подразумевается в документации!
Клиент закрыл соединение, это не значит, что проблема в браузере !? Не за что!
Вы можете найти 499 ошибок в файле журнала, если у вас есть LB (балансировщик нагрузки) перед вашим веб-сервером (nginx) либо AWS, либо haproxy (custom). При этом LB будет действовать как клиент для nginx.
Если вы запустите значения по умолчанию haproxy для:
Это будет означать, что время ожидания LB истечет через 60000 мс, если от nginx не будет ответа. Тайм-ауты могут происходить для загруженных веб-сайтов или сценариев, которым требуется больше времени для выполнения. Вам нужно будет найти тайм-аут, который подойдет вам. Например, расширите его до:
И вы, вероятно, будете настроены.
В зависимости от ваших настроек вы можете увидеть ошибку тайм-аута шлюза 504 в вашем браузере, которая указывает на то, что что-то не так с php-fpm, но этого не будет с ошибками 499 в ваших файлах журнала.
Когда вы указываете 499 на прерывание соединения, регистрируемое файлом nginx. Но обычно это происходит, когда ваш внутренний сервер работает слишком медленно , и сначала истекает время ожидания другого прокси или когда пользовательское программное обеспечение прерывает соединение. Поэтому проверьте, быстро ли отвечает uWSGI или нет, есть ли нагрузка на сервер uWSGI / базы данных.
Во многих случаях между пользователем и nginx есть другие прокси. Некоторые из них могут быть в вашей инфраструктуре, например, CDN, Load Balacer, Varnish cache и т. Д. Другие могут быть на стороне пользователя, например, кэширующий прокси и т. Д.
Если на вашей стороне есть прокси, такие как LoadBalancer / CDN . вы должны установить таймауты на таймаут сначала для вашего бэкэнда, а затем для других прокси для пользователя.
Если у вас есть:
Я рекомендую вам установить:
- n секунд до тайм-аута uWSGI
- n+1 секунд до тайм-аута nginx
- n+2 секунд до тайм-аута для балансировщика нагрузки
- n+3 секунд тайм-аута для CDN.
Если вы не можете установить некоторые тайм-ауты (например, CDN), найдите его тайм-аут и настройте остальные в соответствии с ним ( n , n-1 . ).
Это обеспечивает правильную цепочку тайм-аутов. и вы действительно обнаружите, кто дает тайм-аут и возвращает пользователю правильный код ответа.
В моем случае я получил 499, когда клиентский API закрыл соединение до того, как получил какой-либо ответ. Буквально отправил POST и сразу закрыл соединение. Это решается опцией:
Может это не твой случай? Клиент отправляет данные и не интересуется, что с ним будет и что будет в ответ. Но мое приложение должно обрабатывать данные. Без этой опции данные просто не успевают дойти до моего приложения.
Это не решает проблему того, что ваш клиент не получает ответа. Он устраняет только 499 ошибок в ваших журналах и заменяет их кодом состояния 200. Плохая идея делать это. Настоящее решение - сказать вашему клиенту увеличить время ожидания .
Оказывается, 499 действительно означает «соединение прервано клиентом».
У меня был тайм-аут чтения клиента 60 секунд (и nginx также имеет значение proxy_read_timeout по умолчанию 60 секунд). Итак, в моем случае происходило то, что nginx регистрировал ошибку, upstream timed out (110: Connection timed out) while reading upstream а затем nginx повторял попытку «следующего прокси-сервера в группе внутренних серверов, которую вы настроили». Это если у вас их больше одного.
Затем он пробует следующий и следующий, пока (по умолчанию ) не исчерпает их всех. По истечении каждого времени он также удаляет их из списка «живых» внутренних серверов. После того, как все исчерпаны, он возвращает 504 gateway timeout.
Итак, в моем случае nginx пометил сервер как «недоступный», повторно попробовал его на следующем сервере, затем истекло время 60s ожидания моего клиента (немедленно), поэтому я увидел upstream timed out (110: Connection timed out) while reading upstream журнал, за которым сразу же следует журнал 499. Но это было совпадение во времени.
Если все серверы в группе отмечены как недоступные в данный момент, то также возвращается значение 502 Bad Gateway. 10 с. Смотрите здесь max_fails и fail_timeout. В журналах будет сказано no live upstreams while connecting to upstream.
Если у вас есть только один прокси-сервер в вашей группе серверов, он просто пробует использовать один сервер и возвращает 504 Gateway Time-out и не удаляет отдельный сервер из списка «живых» серверов, если proxy_read_timeout он превзойден. См. Здесь «Если в группе только один сервер, параметры max_fails, fail_timeout и slow_start игнорируются, и такой сервер никогда не будет считаться недоступным».
Есть несколько различных настроек, которые вы можете изменить, чтобы сделать эту проблему «менее сложной». Например, увеличить таймауты или сделать так, чтобы серверы не помечались как "отключенные", когда они истекли . или исправление списка, чтобы он был только размером 1, см. Выше :)
All our security apps – at your fingertips. Protect yourself with security apps & features that suit you best.
Читайте также: