nginx___windows版本

 

 

 

 

一、常用命令

整理到《命令汇总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文件配置示例

nginx___windows版本
#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.conf

 

三、日志每日分割、定期清理

问题:nginx会按照nginx.conf的配置生成access.log和error.log,随着访问量的增长,日志文件会越来越大,既会影响访问的速度(写入日志时间延长),也会增加查找日志的难度

默认的main配置如下:

nginx___windows版本

      解决方法:

1.编写bat脚本

用一个bat脚本按天切割日志,并删除几天前的日志。(参照:https://www.cnblogs.com/luozx207/p/11056996.html)

nginx___windows版本
@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"
logcut.bat

效果如下:

nginx___windows版本

 如要生成 年月日文件夹的格式。配置如下( eg:logs/bak/2019/08/16/access.log)

nginx___windows版本
#定义时间(年月日)

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
logcut2.bat

 2.配置windows任务计划程序

然后用windows自带任务计划定期执行logcut.bat这个可执行文件

nginx___windows版本

 

 

 

 

 

 

 

 

 

 

nginx___windows版本

上一篇:C#操作注册表


下一篇:Dynamics CRM使用Web Api时如果参数里面包含"&"的时候的处理方法