1. 程式人生 > >初識nginx(一)

初識nginx(一)

感悟

在以前的運維過程中,大量環境都使用到了nginx,不管是與keepalived+haproxy做高可用,或者做快取,或者做web應用伺服器用來部署各種各樣的環境,都使用到了它。但是真的瞭解它嗎?並不,很多時候都是看一些部落格裡面的配置檔案,或者在以前的配置檔案上改改即用。所以對nginx的很多特性並不是很瞭解的。而作為一個運維,不僅要改善應用的穩定性,提升交付實施的效率,另外一方面就是提高資源的使用率節省成本。而nginx作為外端訪問節點,這裡面有很多文章可以做,所以有了重新學習nginx的慾望。

一、認識nginx

1.三個主要使用場景

靜態資源
API服務
反向代理(快取加速、負載均衡)

2.為什麼會出現nginx?

訪問量的增長
摩爾定律:效能提升
低效的apache

3.為什麼要用nginx?

高併發、高效能
擴充套件性好,第三方模組多
BSD許可證
熱部署、熱升級
系統開銷很小很小

4.nginx的組成

二進位制檔案
訪問日誌
錯誤日誌
配置檔案

5.版本釋出情況以及主要特性和使用

官網連線:http://nginx.org/
image

主流版本:
官方版:社群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
image

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

image

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分開始執行;

二、nginx的簡單使用

1.搭建靜態資源伺服器

2.具備快取的靜態資源伺服器

3.日誌視覺化

4.ssl的認識

5.基於 OpenResty 用 Lua 語言實現簡單服務