Cet article vous apporte des connaissances pertinentes sur nginx. Il présente principalement comment optimiser les journaux nginx au quotidien. Les amis intéressés peuvent y jeter un œil ci-dessous.
Avant-propos :
Suite à l'article précédent "Souvenez-vous d'un robot d'interception nginx", j'ai trouvé que le journal nginx du serveur est très moche. Après une longue période, une grande partie se trouve dans un seul fichier (même plusieurs années). ). Pour les débutants Linux comme moi, ce n'est pas convivial, je veux donc diviser le journal en fichiers, afin qu'au moins il soit beaucoup plus pratique pour nous de vérifier le journal :
Diviser les fichiers par talent
Allez directement à la configuration de nginx.conf
user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_iso8601] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time'; #引入time_iso8601模块 设置时间 日期变量 map $time_iso8601 $logdate { #'~^(?<ymdh>\d{4}-\d{2}-\d{2}T\d{2})' $ymdh; '~^(?<ymd>\d{4}-\d{2}-\d{2})' $ymd; default 'date-not-found'; } #日志存放目录 access_log /var/log/nginx/access-$logdate.log main; #日志缓存,将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 open_log_file_cache max=10; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip on; include /etc/nginx/conf.d/*.conf; #隐藏http版本号 server_tokens off; }
De cette façon, les fichiers journaux seront générés en fonction du jour ; le plus important ici est d'introduire $time_iso8601
(c'est un format d'heure fourni avec nginx) pour personnaliser variables, et il n’est pas nécessaire de compiler. $time_iso8601
(这个是nginx里边自带的一个时间格式)进行自定义变量,不需要额按编译。
日期格式优化
nginx自带两种时间格式:$time_iso8601
形如 2023-03-29T16:58:49+08:00
$time_local
形如 14/Nov/2022:08:28:14 +0000
可以看出$time_local
的格式看起来不是很美妙,对于我自己来说肯定按照 ‘年月日时分秒’ 这样看更顺眼一些,所以我们在自定义日志格式的时候,时间格式也是选择的是$time_iso8601
。
时间怎么和我们本地时间一致
时间格式顺眼了,但是发现时间还是UTC时区的时间,怎么处理呢:
我这边使用的是docker-compose
,可以直接配置环境变量。
version: '3' services: d_nginx: container_name: c_nginx environment: TZ: 'Asia/Shanghai'
第二种就是Dockerfile
中编译,一劳永逸。
FROM nginx:1.20.1-alpine #定义时区参数 ENV TZ=Asia/Shanghai
有一些低版本的nginx做了以上两步还是不得行,有可能是因为缺少了tzdata
时区数据包。
FROM nginx:1.12.1-alpine #将alpine的源更换成阿里云的源 RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories #定义时区参数 ENV TZ=Asia/Shanghai #安装时区数据包 RUN apk add --update tzdata #设置时区 RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
经过上边的步骤nginx日志里边的格式和时间应该就是我自己想要的了。
给大家分享一个nginx日志分析工具
《goaccess》goaccess nginx.log -a > nginx.html
Optimisation du format de date
$time_iso8601
en forme de 2023-03-29T16:58:49+08 : 00
$time_local
est sous la forme de 14/Nov/2022:08:28:14 +0000
Vous pouvez voir que $time_local Le format n'est pas très beau. Pour moi, il est plus agréable à l'œil selon « année, mois, jour, heure, minute et seconde ». Ainsi, lorsque nous personnalisons le format du journal, le format de l'heure l'est également. sélectionné comme <code>$time_iso8601.
docker-compose code>, vous pouvez configurer directement les variables d'environnement. 🎜
Dockerfile
, une fois pour toutes. 🎜rrreee🎜Il existe certaines versions inférieures de nginx qui ne peuvent toujours pas fonctionner après avoir effectué les deux étapes ci-dessus. Cela peut être dû au fait que le package de données de fuseau horaire tzdata
est manquant. 🎜rrreee🎜Après les étapes ci-dessus, le format et l'heure dans le journal nginx devraient être ce que je veux. 🎜🎜🎜 Partagez avec vous un outil d'analyse de logs nginx🎜🎜🎜"goaccess 》🎜🎜goaccess nginx.log -a > nginx.html
🎜Cet outil peut analyser facilement et rapidement les journaux nginx et peut afficher de nombreuses informations visuellement pour nous aider à localiser rapidement des problèmes tels que le ; le nombre d'appels d'interface (propre à une certaine interface), le nombre de visiteurs, etc. 🎜🎜🎜🎜🎜🎜Apprentissage recommandé : "🎜Tutoriel d'utilisation de Nginx🎜"🎜🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!