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.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  16;                                #----------工作進程個數,可配置多個(一般等於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.yzs {                            #----------  集群配置(這里設置集群名稱為test)    upstream設置,設置代理服務器(負載均衡池),默認的負載均衡方式是輪詢,另外一種是ip_hash
        #max_fails=1 fail_timeout=10s
        server 172.16.1.237:80   ;              #----------  weight為權重,不寫默認為1:1 指定輪詢幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
        server 172.16.1.131:80   ;  
        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  yzs;                            #---------- 主機名稱

        #client_max_body_size 500m;                         #--------上傳文件最大限制   不設置默認1m
        location / {
               
            proxy_pass http://gzy.yzs;                                           #----------將定向的路徑轉到訪問你服務器集群上(對應上面設置的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;
       
       }
        location /nginxStatus {                              #----------添加的status模塊,是查看Nginx的運行狀態
            stub_status on;
            access_log off;
            error_log off;
        }
        
        
        #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運行情況

location /nginxStatus {                              #----------添加的status模塊,是查看Nginx的運行狀態
            stub_status on;
            access_log off;
            error_log off;
        }

http://xxxx/nginxStatus

  

active connections  //對后端發起的活動連接數
server accepts handled requests //nginx 總共處理了2268692 個連接, 成功創建2268692  次握手,總共處理了15002597個請求
reading  // nginx 讀取到客戶端的Header信息數
writing  //nginx 返回給客戶端的Header信息數
waiting // 開啟 keep-alive 的情況下,這個值等於 active- (reading + writing),意思就是Nginx說已經處理完正在等候下一次請求指令的駐留連接
(如果reading或writing的值很高,說明正在處理的數據量很大,可能是因為后端的 php 程序處理慢,拖了后腿,而一般來說,PHP之后以慢,是因為MYSQL,另一個原因很可能就是IO慢,或者客戶端的網絡慢(這種情況在國內常見些)).

 

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

問題:nginx會按照nginx.conf的配置生成access.log和error.log,隨着訪問量的增長,日志文件會越來越大,既會影響訪問的速度(寫入日志時間延長),也會增加查找日志的難度

默認的main配置如下:

      解決方法:

3.1.編寫bat腳本

 

用一個bat腳本按天切割日志,並刪除幾天前的日志(我放到了bak文件夾下,別忘了在logs下建個bak文件夾,之前忘了導致找了半天原因)。(參照: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"
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:\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

(如何要切割日志,那么一定要把nginx解壓安裝到沒有空格的文件路徑里)

注意1:move命令如路徑或文件名有空格則會報語法錯誤,解決方法是在加上雙引號。Eg:

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

                 但下面的重新加載日志任務和刪除歷史記錄任務執行不了。后來我把nginx安裝位置換了個沒有空格的文件路徑后才ok

 故:要切割日志,那么一定要把nginx解壓安裝到沒有空格的文件路徑里

 

  注意2: 在測試時,windows自動任務執行結果是(0x1),費了我很長時間找不到原因,后來發現是執行bat時,沒有可刪除的文件,執行結果報(0x1)。當有文件可刪時,執行結果就“操作成功完成。(0x0)”

 

  

 

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

查看nginx運行狀態:

https://blog.csdn.net/qq_40884473/article/details/118687650

http://www.voidcn.com/article/p-mdtfwngb-nw.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM