上一片老猫和大家分享了Nginx的相关的一些概念,以及一些基础的Nginx的模型,本篇开始,和大家一起探讨一下Nginx的一些配置信息,讲清楚所以然,为什么要这么配置,这么配置有什么作用,这是本节的初衷。
玩过nginx的都知道nginx.conf,nginx的最主要的配置也就是在这个文件中。我们首先看一下这个配置的结构信息。打开nginx.conf文件,我们浏览一下,大概可以得到如下一个结构图。
上述结构图还是比较清晰,老猫相信大多数开发配置nginx的话其实主要是为了做前后端分离的项目,因此,接触最多的也就是http模块中server的配置,对其他的配置有什么作用,应该不是每个人都知道。所以接下来每个模块的详细介绍,且听老猫接下来细细分析。
user root;
worker_processes 1;
pid logs/nginx.pid;
events { # 默认使用epoll use epoll; # 每个worker允许连接的客户端最大连接数 worker_connections 10240; }
http {}
include mime.types;
main
为定义的格式名称,如此 access_log 就可以直接使用这个变量了
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '#'$status $body_bytes_sent "$http_referer" '#'"$http_user_agent" "$http_x_forwarded_for"';#access_log logs/access.log main; 参数名参数意义$remote_addr客户端ip$remote_user远程客户端用户名,一般为:’-’$time_local时间和时区$request请求的url以及method$status响应状态码$body_bytes_send响应客户端内容字节数$http_referer记录用户从哪个链接跳转过来的$http_user_agent用户所使用的代理,一般来时都是浏览器$http_x_forwarded_for通过代理服务器来记录客户端的ip
sendfile
使用高效文件传输,提升传输性能。启用后才能使用tcp_nopush
,是指当数据表累积一定大小后才发送,提高了效率。
sendfile on;tcp_nopush on;
keepalive_timeout
设置客户端与服务端请求的超时时间,保证客户端多次请求的时候不会重复建立新的连接,节约资源损耗。
#keepalive_timeout 0;keepalive_timeout 65;
gzip
启用压缩,html/js/css压缩后传输会更快
gzip on;
server
可以在http
指令块中设置多个虚拟主机server { listen 88; server_name localhost; location / { root html; index index.html index.htm; } }
(1)如果nginx.pid丢失,我们要进行手动创建该文件,并且对nginx服务进行reload重启。如果nginx处于启动状态,我们先要查询当前nginx的进程号码,然后设置到我们的nginx.pid中,然后进行重新reload我们的服务器。
(2)自己配置的配置文件无法找到的时候,我们可以用以下命令./nginx -c +路径的方式,进行设置相关的配置文件信息。
(1)./nginx -t 校验自己设置的nginx配置文件是否有效。
(2)./nginx -s reload 重新加载nginx的配置文件信息。
(3)./nginx -s quit 功能性优雅地关闭nginx服务,非强制性关闭,如果有客户有所链接,等释放之后才进行关闭。
(4)./nginx -s stop 暴力关闭,直接快速关闭nginx服务,紧急情况下使用该指令。
(5)./nginx -h 或者./nginx -?查询nginx的用法大全。
(6)./nginx -c +path 手动设置相关配置文件信息,指定配置文件路径,多配置下可以手动切换核心配置文件。
(7)./nginx -v简单版本信息 ./nginx -V表示详细版本信息。
随着业务的发展,我们的线上用户访问量往往会越来越大,这时候就会产生很多访问日志。现有的日志都会存在 access.log
文件中,但是随着时间的推移,这个文件的内容会越来越多,体积会越来越大,不便于运维人员查看,所以我们可以通过把这个大的日志文件切割为多份不同的小文件作为日志,切割规则可以以天
为单位,如果每天有几百G或者几个T的日志的话,则可以按需以每半天
或者每小时
对日志切割一下。
下面是老猫整理出来的切割nginx的日志的方法。当然是通过我们的shell脚本去执行。「具体步骤如下:」
cut_my_log.sh
,内容为:
cut_my_log.sh
添加可执行的权限:
chmod +x cut_my_log.sh
./cut_my_log.sh
当然以上的配置信息,大家可以根据自己本身的LOG_PATH以及PID去设置自己的日志原始路径以及pid的路径。
当我们执行该脚本之后我们就能够成功对其进行拆分了,老猫本地拆分结果如下:
并且通过里面的详细信息,我们不难发现,之前的一部分日志已经被顺利拆分到了其他几个文件中,大家可以试试。
如果我们每天去做这个拆分动作的时候,其实是愚蠢的,其实在我们的linux中系统中也有定时任务的说法,其用法也和我们Java中的定时任务类似,所以大家也非常容易上手。我们可以利用linux中的crontabs这个插件去实现。具体如何做的如下:
yum install crontabs
crontab -e
编辑并且添加一行新的任务:
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh
service crond restart
service crond start //启动服务 service crond stop //关闭服务 service crond restart //重启服务 service crond reload //重新载入配置 crontab -e // 编辑任务 crontab -l // 查看任务列表
Cron表达式是,分为5或6个域,每个域代表一个含义,如下所示:
分 | 时 | 日 | 月 | 星期几 | 年(可选) | |
---|---|---|---|---|---|---|
取值范围 | 0-59 | 0-23 | 1-31 | 1-12 | 1-7 | 2019/2020/2021/… |
*/1 * * * *
59 23 * * *
0 1 * * *
老猫为了演示的方便,按照上面的步骤将其设置为一分钟执行一次,效果图如下:
以上32分以及33分出现的日志已经说明当前的定时任务生效了。当然正常的使用情况我们还是一天跑一次会比较好,例如就像后面的举例,每日凌晨进行执行。
以上是老猫对配置文件进行介绍并且实现了对相关的日志进行拆分,包括日志的手动切割以及自动切割。感兴趣的小伙伴可以参照着去做一下实现。可能会帮你解决一部分问题。