配置日志格式如下
log_format my
‘$remote_addr [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent” $upstream_addr‘ ;
即可查看分发到哪个服务器上了
220.178.82.149 [01/Mar/2023:18:25:01 +0800] "GET /file/17308 HTTP/2.0" 200 809718 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232
220.178.82.149 [01/Mar/2023:18:25:01 +0800] "GET /file/17300 HTTP/2.0" 200 746063 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232
220.178.82.149 [01/Mar/2023:18:25:01 +0800] "GET /file/17302 HTTP/2.0" 200 669418 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 47.243.111.94:8888
220.178.82.149 [01/Mar/2023:18:25:03 +0800] "GET /file/17309 HTTP/2.0" 200 830448 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 47.243.111.94:8888
220.178.82.149 [01/Mar/2023:18:25:04 +0800] "GET /file/17311 HTTP/2.0" 200 668877 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232
44.236.207.248 [01/Mar/2023:18:25:05 +0800] "GET /file/17073 HTTP/2.0" 200 77726 "https://www.wusong97.top/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.125 Safari/537.36" –
220.178.82.149 [01/Mar/2023:18:25:05 +0800] "GET /file/17305 HTTP/2.0" 200 895924 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 47.243.111.94:8888
183.203.160.78 [01/Mar/2023:18:25:05 +0800] "GET /file/16637 HTTP/2.0" 200 21395 "http://v.vjiangyin.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.84 Safari/537.36 HBPC/12.1.1.301" –
220.178.82.149 [01/Mar/2023:18:25:06 +0800] "GET /file/17306 HTTP/2.0" 200 713156 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232
220.178.82.149 [01/Mar/2023:18:25:07 +0800] "GET /file/17303 HTTP/2.0" 200 771757 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232
220.178.82.149 [01/Mar/2023:18:25:07 +0800] "GET /file/17301 HTTP/2.0" 200 724316 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" –
发现只有$http_referer等于自己的时候,才会打印ip信息
https://blog.csdn.net/qq_35393472/article/details/128241885
https://blog.csdn.net/qq_25854057/article/details/116240267
nginx的超时问题可以参考上面博客
ps:之前服务器阻塞,导致网站一直handle,是因为配置的超时时间过长导致的
后端服务繁忙,读取超时,返回504.,并没有路由下一个节点,是因为配置了ip_hash;
220.178.82.149 [01/Mar/2023:20:28:17 +0800] "POST /imgbed/file/mylist HTTP/2.0" 504 562 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232 1.007.
删除掉ip_hash以后,开始随机正常,超时了。
220.178.82.149 [01/Mar/2023:20:36:41 +0800] "POST /imgbed/file/mylist HTTP/2.0" 504 562 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232 0.010
220.178.82.149 [01/Mar/2023:20:37:34 +0800] "POST /imgbed/file/mylist HTTP/2.0" 200 6890 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 47.243.111.94:8888 0.034
经过测试,发现:
get请求的:
将会出现如下日志。
220.178.82.149 [01/Mar/2023:20:51:05 +0800] "GET /file/16859 HTTP/2.0" 200 2279364 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232, 47.243.111.94:8888 0.006, 0.034
只有get请求的才可以重新路由,有7s是读取超时的时间。
查了资料
220.178.82.149 [01/Mar/2023:22:21:48 +0800] "POST /imgbed/file/mylist HTTP/2.0" 200 4708 "https://imgbed.link/myfile.html" 8.133.182.37:8232, 47.243.111.94:8888 -, 0.034
发现如下:
当请求类型是POST时,Nginx默认不会失败重试。如果想让POST请求也会失败重试,可以继续向下阅读。
non_idempotent
在Nginx文档中可以看到proxy_next_upstream有一个选项non_idempotent:
normally, requests with a non-idempotent method (POST, LOCK, PATCH) are not passed to the next server if a request has been sent to an upstream server (1.9.13); enabling this option explicitly allows retrying such requests;
通常情况下,如果请求使用非等幂方法(POST、LOCK、PATCH),请求失败后不会再到其他服务器进行重试。加上non_idempotent选项后,即使是非幂等请求类型(例如POST请求),发生错误后也会重试。
如果想让POST请求也会失败重试,需要配置non_idempotent:upstream nginxretry {
server 127.0.0.1:9030 max_fails=0;
server 127.0.0.1:9031 max_fails=0;
}
server {
listen 9039;
location / {
proxy_pass http://nginxretry;
proxy_next_upstream error timeout http_500 non_idempotent;
}
}
重启Nginx后再次使用POST请求访问 http://localhost:9039/ ,再分别查看9030和9031两个端口号对应的服务日志,可以看到两个服务都收到请求,也就是POST请求也会重试了。不过实际上在生产环境中,不建议加上non_idempotent选项,
————————————————
版权声明:本文为CSDN博主「一一空」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/philip502/article/details/121556243
220.178.82.149 [01/Mar/2023:21:31:36 +0800] "POST /imgbed/file/mylist HTTP/2.0" 504 562 "https://imgbed.link/myfile.html" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36 Edg/110.0.1587.57" 8.133.182.37:8232 0.008