浏览 1k
配置了一个nginx在location下有配置access_log字段记录到指定文件,该配置也生效了,但是在故障排查时候发现有部分400日志未记录到access_log所指定的文件,而是记录到了默认的access.log,请大神帮助解答一下。
另外发现有时候nginx的异常日志(比如未匹配到upstream的502日志)只记录到error.log access.log里无记录,有的却在access.log和error.log里都有记录,是跟nginx版本有关系吗?
按点赞数排序
按时间排序
proxy_http_version为1.1,同时Connection: keep-alive,这只是说:HTTP协议是支持长连接的。但客户端要不要使用长连接呢?如果使用长连接,就得有连接池,那么连接池应该是多少呢?毕竟一旦有连接池,就可能存在资源浪费,在用户没有明确的配置keepalive连接池时,Nginx还是不会使用长连接。
没有回答,我就只能自己回答了。
查了下代码,进行gdb跟踪调试后发现:这个主要是因为,每个worker单独维护一个前后端 “链路”关联的四元组信息,在多个worker的情况下,不同的worker保存“链路”关联信息相互独立,彼此不共享。因此即使是相同的IP和端口发来的消息,只要是分配到不同的worker进行处理,都有可能查不到之前的“链路”关联信息,从而无法复用。
解决办法:
1. 单worker配置(性能可能偏低)
2. 修改代码,使用共享内存保存已有的前后端“链路”关联信息,不同worker之间共享结果