• nginx——windows版本


     目录:

    一、常用命令

    二、nginx.conf文件配置示例

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

      3.1.编写bat脚本

      3.2.配置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.11conf
    ginx.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.conf

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

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

    默认的main配置如下:

          解决方法:

    3.1.编写bat脚本

     

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

    @echo off
    rem nginx滚动日志
    rem nginx工作目录
    set workspace=C:
    ginx-1.16.0
    rem 日志存放目录
    set logdir=C:
    ginx-1.16.0logs
    rem 历史日志存放目录
    set logbakdir=C:
    ginx-1.16.0logsak
    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%
    ginx.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

    效果如下:

     另如要生成 年月日文件夹的格式。配置如下( 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:
    ginx-1.16.0logsak2019816)
    
    set backup=C:
    ginx-1.16.0logsak\%d1%\%d2%\%d3%
    
    mkdir %backupdir%
    
    #移动原有日志,相当于重命名
    
    move C:
    ginx-1.16.0logsaccess.log %backupdir%
    move C:
    ginx-1.16.0logserror.log  %backupdir%
    
    #重开日志,生成新的日志文件
    
    C:
    ginx-1.16.0
    ginx.exe -s reopen
    logcut2.bat

    (如何要切割日志,那么一定要把nginx解压安装到没有空格的文件路径里)

    注意:move命令如路径或文件名有空格则会报语法错误,解决方法是在加上双引号。Eg:

              move D:"Program Files" ginx-1.16.0"2 2.txt"   D:"Program Files" ginx-1.16.0"3 3.txt"

                     但下面的重新加载日志任务和删除历史记录任务执行不了。后来我把nginx安装位置换了个没有空格的文件路径后才ok

     故:要切割日志,那么一定要把nginx解压安装到没有空格的文件路径里

    3.2.配置windows任务计划程序

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

     四、学习参数

     

     https://www.cnblogs.com/aguncn/p/11189159.html

    https://www.iteye.com/blog/825635381-2197501

     五、学习网址-启蒙

    tomcat+nginx+redis实现均衡负载、session共享()

    https://www.cnblogs.com/zhrxidian/p/5432886.html

    tomcat+nginx+redis实现均衡负载、session共享()

    https://www.cnblogs.com/zhrxidian/p/5491285.html#4145879

    使用Nginx实现Tomcat集群负载均衡

    https://www.cnblogs.com/machanghai/p/5957086.html

     Nginx反向代理,负载均衡,redis session共享,keepalived高可用 

    https://www.cnblogs.com/mrlinfeng/p/6146866.html

     4种负载均衡方式:

    https://uule.iteye.com/blog/2236475

     

    下面是优化参数相关:

     nginx.conf配置文件中timeout超时时间设置

    https://blog.csdn.net/qq_29663071/article/details/80759098

    nginx优化——keepalive等:

    https://blog.csdn.net/dream_flying_bj/article/details/54709549

     Nginx+Tomcat负载均衡详述与实战-include:

    https://blog.csdn.net/qq_29663071/article/details/80759098

  • 相关阅读:
    SQL怎么随机提取出一条信息 mysql 获取随机记录
    css3 渐变 各浏览器兼容
    php的curl和socket的区别 转
    php获取本机真实IP地址
    SSH超时断开 ssh 老掉线
    php 获取远程服务器信息 get_headers 的使用
    如何删除右键菜单中的Catalyst(TM) Control Center选项
    多线程概念、案例!
    网络编程
    我的博客开通啦
  • 原文地址:https://www.cnblogs.com/zdyang/p/14200724.html
Copyright © 2020-2023  润新知