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 * * *