一、常用命令
整理到《命令汇总20190428.docx》里了 无需安装,直接解压即可。(如何后面要切割日志,那么一定要把nginx解压到没有空格的文件路径里) Windows下Nginx的启动、停止等命令如下(dos下进入nginx-1.15.11目录): 1、启动: start nginx 或 nginx.exe (注:start nginx 不保留黑窗口,nginx.exe保留黑窗口) 2、停止: nginx.exe -s stop 或 nginx.exe -s quit (注:stop是快速停止nginx,可能并不保存相关信息;quit是完整有序的停止nginx,并保存相关信息) 3、重新载入Nginx: nginx.exe -s reload (注:当配置信息修改,需要重新载入这些配置时使用此命令) 4、重新打开日志文件: nginx.exe -s reopen 5、查看Nginx版本: nginx -v 6、检查配置文件没有语法错误 nginx -t nginx-1.15.11\conf\nginx.conf配置文件含义: worker_processes: 工作进程个数,可配置多个(一般等于CPU的总核数或总核数的两倍,例如两个四核CPU,则综合数为8.通过命令ps -ef|grep nginx可以看出来设置的是几个) worker_connections: 单个进程最大连接数 server: 每一个server相当于一个代理服务器 lister: 监听端口,默认80 server_name: 当前服务的域名,可以有多个,用空格分隔(我们是本地所以是localhost) location: 表示匹配的路径,这时配置了/表示所有请求都被匹配到这里 index: 当没有指定主页时,默认会选择这个指定的文件,可多个,空格分隔 proxy_pass: 请求转向自定义的服务器列表 upstream name{ }: 服务器集群名称 nginx负载均衡主要有以下五种策略:(Nginx中的upstream轮询机制介绍:https://www.cnblogs.com/liqiu/p/3140329.html) 轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
二、nginx.conf文件配置示例
#user nobody; #----------使用的用户和组 worker_processes 1; #----------工作进程个数,可配置多个(一般等于CPU的总核数或总核数的两倍,例如两个四核CPU,则综合数为8.通过命令ps -ef|grep nginx可以看出来设置的是几个) error_log logs/error.log info; #----------指定错误日志存放的路径,错误日志记录级别可选项为:[debug|info|notice|warn|error|crit],默认是crit,记录的日志数量从crit到debug,由少到多。eg:error_log /usr/local/nginx/logs/nginx_error.log crit; pid logs/nginx.pid; #----------指定pid存放的路径(pid 进程控制符。即代表了各进程的进程ID,也就是说,PID就是各进程的身份标识) eg: pid /usr/local/nginx/nginx.pid; events { worker_connections 1024; #----------单个进程最大连接数 } http { include mime.types; default_type application/octet-stream; #log_format main ‘$remote_addr - $remote_user [$time_local] "$request" ‘ #----------log_format 自定义日志记录格式设置,main为名字,在access_log命令中引用 # ‘$status $body_bytes_sent "$http_referer" ‘ # ‘"$http_user_agent" "$http_x_forwarded_for"‘; #access_log logs/access.log main; #----------指定日志存放路径,如果想使用默认的combined格式记录日志,可以使用access_log logs/access.log combined; 以下是使用log_format自定义的格式记录日志的。 access_log logs/access.log; sendfile on; #----------这三个参数参照《nginx优化——keepalive等》 tcp_nopush on; tcp_nodelay on; #----------使缓冲区中的数据立即发送出去 禁用了Nagle 算法。(不需要等待0.2s) keepalive_timeout 120s; #---------- 设置keep-alive客户端连接在ngnix服务器端保持开启的超时值(默认75s) 值为0会禁用keep-alive客户端连接 这两个参数参照《nginx优化——keepalive等》 keepalive_requests 10000; #---------- 设置一个keep-alive连接上可以服务的请求的最大数量,当最大请求数量达到时,连接被关闭。默认是100 client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; client_max_body_size 500m; #--------上传文件最大限制 不设置默认1m #client_header_buffer_size 50k; #large_client_header_buffers 4 4k; gzip on; #---------- 开启gzip压缩设置(只能在http模块中设置) gzip_min_length 1024; #gzip_types text/plain text/css application/x-javascript; upstream gzy.eut { #---------- 集群配置(这里设置集群名称为test) upstream设置,设置代理服务器(负载均衡池),默认的负载均衡方式是轮询,另外一种是ip_hash #max_fails=1 fail_timeout=10s server 172.16.1.197:80 weight=1 ; #---------- weight为权重,不写默认为1:1 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 server 172.16.1.198:80 weight=1 ; ip_hash; #----------不写的话是轮询方式,ip_hash为每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 keepalive 1000; #----------1.设置upstream服务器的空闲keepalive连接的最大数量.2. 当这个数量被突破时,最近使用最少的连接将被关闭 3.特别提醒:keepalive指令不会限制一个nginx worker进程到upstream服务器连接的总数量 4.可参考《nginx优化——keepalive等.html》 } server { #---------- 每一个server相当于一个代理服务器 listen 80; #---------- 监听的端口(默认为80) server_name eut; #---------- 主机名称 #client_max_body_size 500m; #--------上传文件最大限制 不设置默认1m location / { proxy_pass http://gzy.eut; #----------将定向的路径转到访问你服务器集群上(对应上面设置的upstream的集群名称)(upstream设置的是test,故这里写http://test) proxy_http_version 1.1; #------ HTTP1.0为短连接 HTTP1.1为长连接 这两个参数参照《nginx优化——keepalive等.html》 proxy_set_header Connection ""; proxy_set_header Host $host; #--------- 变量$host等于客户端请求头中的Host值。 #如果是非80端口,配置为Host $host:端口号,目的是将代理服务器收到的用户的信息传到真实服务器上 eg: proxy_set_header Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; #--------- $remote_addr客户端的ip地址 proxy_set_header REMOTE-HOST $remote_addr; #--------- $remote_addr客户端的ip地址 proxy_set_header X-Forwarded-For $http_x_forwarded_for; #--------- 后端的web服务器可以通过X-Forwarded-For获取真实的IP地址 #proxy_connect_timeout 300s; #----------与服务器连接的超时时间,默认60s(如果一个集群服务器挂掉了(挂掉指连接不上),而负载正好到这个服务器,那么在proxy_connect_timeout时间后,负载才会跳到另一个集群服务器上) proxy_send_timeout 300s; #----------默认60s;这个指定设置了发送请求给upstream服务器的超时时间。超时设置不是为了整个发送期间,而是在两次write操作期间。如果超时后,upstream没有收到新的数据,nginx会关闭连接 proxy_read_timeout 600s; #----------默认60s;该指令设置与代理服务器的读超时时间。它决定了nginx会等待多长时间来获得请求的响应。这个时间不是获得整个response的时间,而是两次reading操作的时间。(??什么是两次reading操作的时间) #client_max_body_size 500m; #--------上传文件最大限制 不设置默认1m #proxy_next_upstream http_502 http_504 error timeout invalid_header; #---------如果后端服务器返回502,504,执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现failover。 #add_header Cache-Control no-store; #add_header Pragma no-cache; } #charset koi8-r; #----------配置该虚拟机的字符设置,如果不配置继承自http中的charset设置 #access_log logs/host.access.log main; #----------访问日志文件设置,如果server虚拟机中不设置,则继承http模块中的access_log的设置 #error_page 404 /404.html; #---------- 用于设置如果出现指定的HTTP错误状态码,则返回指定的url页面 #error_page 500 502 503 504 /50x.html; #---------- 用于设置如果出现指定的HTTP错误状态码,则返回指定的url页面 #location = /50x.html { # root html; #} } }
三、日志每日分割、定期清理
问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度。
默认的main配置如下:
解决方法:
1.编写bat脚本
用一个bat脚本按天切割日志,并删除几天前的日志。(参照:https://www.cnblogs.com/luozx207/p/11056996.html)
@echo off rem nginx滚动日志 rem nginx工作目录 set workspace=C:\nginx-1.16.0 rem 日志存放目录 set logdir=C:\nginx-1.16.0\logs rem 历史日志存放目录 set logbakdir=C:\nginx-1.16.0\logs\bak rem 将当前日志重命名,用今日的日期 move %logdir%\access.log %logbakdir%\%date:~0,4%%date:~5,2%%date:~8,2%_access.log move %logdir%\error.log %logbakdir%\%date:~0,4%%date:~5,2%%date:~8,2%_error.log rem 重新打开日志文件,如果不做这一步,nginx会继续往已被重命名的日志文件中写入日志 %workspace%\nginx.exe -s reopen -p %workspace% rem 删除七天前的日志(根据文件修改日期判断,且*.log即log格式的文件 就会删除) set DaysAgo=7 forfiles /p %logbakdir% /m *.log /d -%DaysAgo% /c "cmd /c del /f /q @path"
效果如下:
如要生成 年月日文件夹的格式。配置如下( eg:logs/bak/2019/08/16/access.log)
#定义时间(年月日) for /f "tokens=1 delims=/ " %%j in ("%date%") do set d1=%%j for /f "tokens=2 delims=/ " %%j in ("%date%") do set d2=%%j for /f "tokens=3 delims=/ " %%j in ("%date%") do set d3=%%j #创建目录便于查看(eg:C:\nginx-1.16.0\logs\bak\2019\08\16) set backup=C:\nginx-1.16.0\logs\bak\%d1%\%d2%\%d3% mkdir %backupdir% #移动原有日志,相当于重命名 move C:\nginx-1.16.0\logs\access.log %backupdir% move C:\nginx-1.16.0\logs\error.log %backupdir% #重开日志,生成新的日志文件 C:\nginx-1.16.0\nginx.exe -s reopen
2.配置windows任务计划程序
然后用windows自带任务计划定期执行logcut.bat这个可执行文件