У меня есть сервер api от nginx, а конфиг ниже.Я использую «proxy_connect_timeout» и «proxy_next_upstream», чтобы создать «резервный сервер», что означает, что «proxy_pass http://backup_server;" занят (может быть, потому что mysql / redis connect timeout), а время запроса до 400 мс,он возвращает мне http_504, и запрос приходит к «jump_to_error», а затем обрабатывается сценариями lua (lua просто возвращает статическое содержимое файла, и я также показываю его ниже).
location /xxx/xxx/xxx{
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host xxx.xxx.xxx;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 400ms;
proxy_send_timeout 400ms;
proxy_read_timeout 400ms;
proxy_buffer_size 256k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
proxy_temp_file_write_size 256k;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 http_404 http_429;
proxy_max_temp_file_size 128m;
proxy_pass http://backup_server;
access_log /nginx.log json;
error_page 429 500 502 503 504 = @jump_to_error;
}
location @jump_to_error {
default_type 'text/plain';
content_by_lua_file xxx.lua;
access_log /lua.log json;
}
Но когдаувеличение числа запросов в секунду (примерно на 40 в секунду), время $ upstream_response_time в nginxlog становится больше 400 мс. И я проверил загрузку процессора, дисковый ввод-вывод и сетевой ввод-вывод, все они нормальные.
request_time log
Итак, у меня есть два вопроса по этому поводу.
Почему $ upstream_response_time и должно быть больше, чем «proxy_connect_timeout», установленное в nginx.conf.(Я также проверяю, что если продолжать увеличивать qps, время может даже превышать 1 с ..)
Я также проверил свой онлайн-журнал nginx, обнаружил, что есть какой-то запросс двумя «восходящий статус / восходящее время».Я установил два сервера в модуле proxy_pass, и я знаю, что когда один из них отключен, proxy_pass вернет мне два исходящих состояния (502 200) и два восходящих времени (http://nginx.org/en/docs/http/ngx_http_upstream_module.html).). Но я не могу понять, почему существует около 0,1% запросов придва «504 статуса» только в одном «504 статусе».
есть несколько двойных 504 статусов
И это мои сценарии luaкоторые просто возвращают статическое содержимое файла. У меня есть журнал отладки для записи затрат времени в lua, и почти все запросы не превышают 10 мс, так что, возможно, мы можем предположить, что lua не относится к приведенному выше вопросу.
function readfile(path)
local file = io.open(path, "r")
if file then
local content = file:read("*a")
io.close(file)
return content
end
return nil
end
local file = "/xxx/xxx/file1"
local content = readfile(file)
ngx.header["Access-Control-Allow-Origin"] = "*"
ngx.header["Content-Type"] = "text/plain; charset=utf-8"
ngx.print(content)