初識nginx(一)
感悟
在以前的運維過程中,大量環境都使用到了nginx,不管是與keepalived+haproxy做高可用,或者做快取,或者做web應用伺服器用來部署各種各樣的環境,都使用到了它。但是真的瞭解它嗎?並不,很多時候都是看一些部落格裡面的配置檔案,或者在以前的配置檔案上改改即用。所以對nginx的很多特性並不是很瞭解的。而作為一個運維,不僅要改善應用的穩定性,提升交付實施的效率,另外一方面就是提高資源的使用率節省成本。而nginx作為外端訪問節點,這裡面有很多文章可以做,所以有了重新學習nginx的慾望。
一、認識nginx
1.三個主要使用場景
靜態資源
API服務
反向代理(快取加速、負載均衡)
2.為什麼會出現nginx?
訪問量的增長
摩爾定律:效能提升
低效的apache
3.為什麼要用nginx?
高併發、高效能
擴充套件性好,第三方模組多
BSD許可證
熱部署、熱升級
系統開銷很小很小
4.nginx的組成
二進位制檔案
訪問日誌
錯誤日誌
配置檔案
5.版本釋出情況以及主要特性和使用
官網連線:http://nginx.org/
主流版本:
官方版:社群nginx.org、商業版nginx.com
淘寶:Tengine
其它:社群OpenResty.org 商業OpenResty.com
編譯安裝nginx
————————————————————————————————
為什麼選擇編譯而非apt-get或者yum?
因為直接下載的官方二進位制檔案不一定包含了我們想要的模組,我們如果需要定製化屬於自己的模組,必須要重新編譯後安裝。基於此,我覺得不管是dockerfile或者本地部署nginx,都儘量使用編譯安裝。尤其是dockerfile,為符合docker極簡思想,我們一定要編譯最簡單的nginx。為啥咧? 我經常看見很多老哥,經常說 為啥我的k8s伺服器老是會磁碟報警?(你一個映象1個G,每天發10個版本,你不報警誰報警?) 所以咧,如果用成本來考核一個運維,我覺得一個浪費資源的運維是不合格的,一定不是看過老馬哥視訊的。
————————————————————————————————
1.下載 http://nginx.org/download 2.編譯 nginx-1.14.2 ├── auto ├── CHANGES ├── CHANGES.ru ├── conf ├── configure ├── contrib ├── html ├── LICENSE ├── man ├── README └── src 配置項的高亮:cp -r contrib/vim/* ~/.vim 複製此模組之後會顯示出語法的高亮,便於配置nginx以及檢查錯誤 configure的說明: --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path --conf-path=PATH set nginx.conf pathname --error-log-path=PATH set error log pathname --pid-path=PATH set nginx.pid pathname --lock-path=PATH set nginx.lock pathname --user=USER set non-privileged user for worker processes --group=GROUP set non-privileged group for worker processes --build=NAME set build name --builddir=DIR set build directory --with 預設不會編譯的模組 --without 預設編譯的模組 中間模組 objs 主要的是modules 裡面會看到裡面的各種模組 最後使用make install 即可安裝完成
配置nginx
1.過載
過載:nginx -s reload
熱部署(nginx升級):
初始版本:
curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.14.2
2.熱部署
原理:新版本的nginx編譯好後 只需要更換nginx的二進位制檔案即可
即下載新的安裝包,按照上述流程重新編譯 編譯完成之後拷貝二進位制檔案(原來的複製為old) 再向原來的nginx的主程序發USR2信令 這個時候就會新起nginx
master以及worker程序來承擔請求
curl -I 127.0.0.1
HTTP/1.1 200 OK
Server: nginx/1.15.8
Date: Tue, 08 Jan 2019 07:42:17 GMT
3.日誌切割
做日誌切割一方面是為了分析日誌,另一方面是為了收集日誌,我們可以在日誌命名的時候再加上一些host資訊,這樣以後同步到ELK裡面我們就能更準確的找到日誌了,或者我們直接寫到nginx的log模組裡面去。也是為了後期維護的方便
A.編寫指令碼
#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/nginx/logs_backup/$year$month" #日誌儲存路徑
logs_path="/usr/local/nginx/logs/" #要切割的日誌路徑
logs_access="access" #要切割的日誌
logs_error="error"
pid_path="/usr/local/nginx/logs/nginx.pid" #nginx的pid
[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y%m%d`
#mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
3.做定時任務
crontab –e
59 23 * * * bash /usr/local/nginx/shell/cut_ngnix_log.sh #每天23:59分開始執行;