Nginx基礎知識學習(安裝/進程模型/事件處理機制/詳細配置/定時切割日誌)

一、Linux下Nginx的安裝

1.去官網 //nginx.org/download/下載對應的Nginx安裝包,推薦使用穩定版本。

2.上傳Nginx到Linux伺服器。

3.安裝依賴環境

(1)安裝gcc環境

  yum install gcc-c++

(2)安裝PCRE庫,用於解析正則表達式

 yum install -y pcre pcre-devel

 

(3)安裝zlib壓縮和解壓縮依賴 

 yum install -y zlib zlib-devel

 

(4)SSL安全的加密套接字協議層,用於HTTP安全傳輸,即HTTPS 

 yum install -y openssl openssl-devel

 

 4.解壓,注意:解壓後得到的是源碼,需要編譯後才可以安裝

tar -zxvf nginx-1.19.0.tar.gz

 

5.編譯前,先創建Nginx臨時目錄,不然在啟動nginx的過程中會報錯

mkdir /var/temp/nginx -p

6.在nginx目錄下面輸入如下命令進行配置,目的是為了生成mckefile文件

./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi

配置命令解釋:

 

 7.make編譯

make

8.安裝

make  install

9.進入sbin目錄啟動nginx

./nginx
##停止
./nginx  -s  stop
##優雅停止(等客戶端沒連接了再停止)
./nginx  -s  exit
##重新載入
./nginx  -s  reload

 

二、Nginx的進程模型

 

 

三、Nginx的事件處理機制

1.傳統伺服器的事件處理機製為一個客戶請求後,Master為其創建一個whrker去處理,當發生阻塞時Master又得繼續創建新的worker去處理,這樣處理效率,並發程度都非常的低。

 

 2.Nginx的事件處理機製為:當用戶的請求阻塞時,這個worker還可以非同步的繼續處理其他用戶請求,並發程度大大增加,開銷也變得更小了

 

四、nginx.conf核心配置文件

1. 設置worker進程的用戶,指的linux中的用戶,會涉及到nginx操作目錄或文件的一些許可權,默認為nobody

user root;

2. worker進程工作數設置,一般來說CPU有幾個,就設置幾個,或者有多個應用設置為N-1也行

worker_processes 1;

3. nginx 日誌級別debug | info | notice | warn | error | crit | alert | emerg,錯誤級別從左到右越來越大

4. 設置nginx進程 pid

pid        logs/nginx.pid;

5. 設置工作模式

events {
   # 默認使用epoll
   use epoll;
   # 每個worker允許連接的客戶端最大連接數
   worker_connections  10240;
}

6. http 是指令塊,針對http網路傳輸的一些指令配置

7. include 引入外部配置,提高可讀性,避免單個配置文件過大(比如可以通過include引入server)

include       mime.types;

8. 設定日誌格式,main為定義的格式名稱,如此 access_log 就可以直接使用這個變數了

各參數的具體意義:

$remote_addr      客戶端ip    

$remote_user      遠程客戶端用戶名,一般為:』-』    

$time_local        時間和時區    

$request            請求的url以及method    

$status            響應狀態碼    

$body_bytes_send         響應客戶端內容位元組數    

$http_referer           記錄用戶從哪個鏈接跳轉過來的    

$http_user_agent            用戶所使用的代理,一般來時都是瀏覽器    

$http_x_forwarded_for         通過代理伺服器來記錄客戶端的ip    

9. sendfile使用高效文件傳輸,提升傳輸性能。啟用後才能使用tcp_nopush,是指當數據表累積一定大小後才發送,提高了效率。

sendfile        on;
tcp_nopush      on;

10. keepalive_timeout設置客戶端與服務端請求的超時時間,保證客戶端多次請求的時候不會重複建立新的連接,節約資源損耗。

#keepalive_timeout  0;
keepalive_timeout  65;

11. gzip啟用壓縮,html/js/css壓縮後傳輸會更快

gzip on;

12. server可以在http指令塊中設置多個虛擬主機

   server {
           listen       88;
           server_name  localhost;
   
           location / {
               root   html;
               index  index.html index.htm;
           }
   }

listen 監聽埠

server_name localhost、ip、域名

location 請求路由映射,匹配攔截

root 請求位置

index 首頁設置

五、利用定時腳本實現日誌的切割

Nginx目前的日誌都存在access.log文件中,但是隨著時間的推移,這個文件的內容會越來越多,體積也會越來越大,不便於查看,所以可以通過把這個大的日誌文件切割為多分不同的小文件,切割可以以天、小時、分鐘等為單位按需要進行切割

步驟:

A.創建可執行腳本

1.創建一個shell可執行的文件:cut_my_log.sh,內容為:

 

#!/bin/bash
LOG_PATH="/var/log/nginx/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/var/run/nginx/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log

#向Nginx主進程發送訊號,用於重新打開日誌文件
kill -USR1 `cat $PID`

 

2.為腳本文件添加許可權

chmod +x cut_my_log.sh

3.執行腳本文件(即進行一次切割:將原日誌文件拷貝一份,並且重新打開原日誌文件,可以理解為清空原日誌文件)

./cut_my_log.sh

B.創建定時任務定期執行腳本

1.安裝定時任務

yum install crontabs

2.編輯並添加新的定時任務(定為每分鐘執行一次日誌腳本)

crontab  -e
*/1 * * * * /usr/local/nginx/sbin/cut_my_log.sh

3.重啟定時任務

service crond restart

以上就完成了Nginx日誌的定時切割

六、定時任務表達式:

Cron 表達式分為五個或者六個區域,每個區域表示一個含義,如下:

  星期幾 年(非必須)
取值範圍 0-59 0-23 1-31 1-12 1-7 2021/2022…..

常用表達式:

1.每分鐘執行:

*/1 * * * *

2.每天凌晨(每天晚上23:59)執行:

59 23 * * *

3.每天凌晨1點執行:

0 1 * * *

 

Tags: