01-nginx詳細介紹

為什么使用Nginx

截至2020年,差不多世界上每3個網(wǎng)站中就有1個使用Nginx讲仰。

0

Nginx以事件驅(qū)動的方式編寫,所以有非常好的性能痪蝇,同時也是一個非常高效的反向代理鄙陡、負載平衡服務(wù)器。在性能上躏啰,Nginx占用很少的系統(tǒng)資源趁矾,能支持更多的并發(fā)連接,達到更高的訪問效率丙唧;在功能上愈魏,Nginx是優(yōu)秀的代理服務(wù)器和負載均衡服務(wù)器觅玻;在安裝配置上想际,Nginx安裝簡單、配置靈活溪厘。

Nginx支持熱部署胡本,啟動速度特別快,還可以在不間斷服務(wù)的情況下對軟件版本或配置進行升級畸悬,即使運行數(shù)月也無需重新啟動侧甫。

在微服務(wù)的體系之下,Nginx正在被越來越多的項目采用作為網(wǎng)關(guān)來使用蹋宦,配合Lua做限流披粟、熔斷等控制

nginx特性

l 輕量級(對硬件資源消耗),高性能http服務(wù)器

l 高性能反向代理服務(wù)器

l 基于模塊化設(shè)計

l 基于EPOLL事件驅(qū)動模型

l 帶緩存的日志寫操作

l URL重寫(rewrite)模塊

l 支持驗證HTTP referer,實現(xiàn)反倒鏈機制

l 支持緩存功能

l 在線升級

nginx服務(wù)架構(gòu)

Nginx啟動時會啟動一個主進程master及多個子進程worker冷冗;配置緩存時還會啟動cache load和cache manager進程守屉。所有進程以"共享內(nèi)存"機制完成進程間通信;master進程以特權(quán)用戶運行蒿辙,其他進程以非特權(quán)用戶運行拇泛。

? Master主進程主要完成如下工作

① 讀取并驗證配置文件

② 創(chuàng)建滨巴、綁定、及關(guān)閉套接字socket(IP:port)

③ 啟動俺叭、終止及維護worker進程的個數(shù)

④ 無須中止服務(wù)而重新配置工作特性

⑤ 控制非中斷式程序升級恭取,啟用新的二進制程序并在需要時回滾至老版本

⑥ 重新打開日志文件

⑦ 編譯嵌入式perl腳本

? Worker進程主要完成如下工作

① 接收、傳入并處理客戶端的連接

② 提供反向代理及過濾功能

③ IO調(diào)用熄守,獲取響應(yīng)數(shù)據(jù)

④ 與后端服務(wù)器通信蜈垮,接收后端服務(wù)器處理結(jié)果

⑤ 數(shù)據(jù)緩存、訪問緩存索引裕照、查詢和調(diào)用緩存數(shù)據(jù)

⑥ 發(fā)送請求結(jié)果窃款,響應(yīng)客戶端請求

⑦ 接收主程序指令,比如重啟牍氛、退出晨继、升級等

nginx部署

nginx安裝分為yum安裝、編譯安裝搬俊。yum安裝要配置yum倉庫紊扬。一般使用epel源來這安裝。yum安裝比較簡單唉擂,下面為編譯安裝案例餐屎。

nginx編譯部署

上傳所需要的nginx包,這里使用的是nginx1.16.1

0

下載編譯安裝nginx玩祟,keepalived所需要的基礎(chǔ)命令以及依賴

yum install -y vim unzip openssh-clients gcc openssl-devel make kernel-devel gcc-c++ zlib-devel pcre-devel gcc
0

為了路徑一致性和整潔性在/app下創(chuàng)建nginx文件夾

mkdir -p /app/nginx

編譯安裝nginx

將上傳的nginx包解壓到/app/nginx目錄下

tar -xvf /media/nginx-1.16.1.tar.gz -C /app/nginx/

切換到nginx1.16.1版本 解壓目錄下

cd /app/nginx/nginx-1.16.1/ ./configure --prefix=/app/nginx/

configure命令是用來檢測你的安裝平臺的目標(biāo)特征的腹缩。它定義了系統(tǒng)的各個方面,包括nginx的被允許使用的連接處理的方法空扎,比如它會檢測你是不是有CC或GCC藏鹊,并不是需要CC或GCC,它是個shell腳本转锈,執(zhí)行結(jié)束時盘寡,它會創(chuàng)建一個Makefile文件。

0

開始編譯安裝nginx

make && make install

編譯安裝支持以下參數(shù)

nginx的configure命令支持以下參數(shù):

--prefix=path

定義nginx的安裝目錄

--sbin-path=path

設(shè)置nginx的可執(zhí)行文件的路徑

--conf-path=path

nginx允許使用不同的配置文件啟動撮慨,通過命令行中的-c選項

--pid-path=path

設(shè)置nginx.pid文件竿痰,將存儲的主進程的進程號

--error-log-path=path

設(shè)置主錯誤,警告砌溺,和診斷文件的名稱

--http-log-path=path

設(shè)置主請求的HTTP服務(wù)器的日志文件的名稱

--user=name

nginx工作進程的用戶影涉。可以在nginx.conf配置文件中 使用的 user指令

--group=name

設(shè)置nginx工作進程的用戶組规伐⌒非悖可以在nginx.conf配置文件中 使用的 user指令

--with-select_module --without-select_module

啟用或禁用構(gòu)建一個模塊來允許服務(wù)器使用select()方法。該模塊將自動建立楷力,如果平臺不支持的kqueue喊式,epoll孵户,rtsig或/dev/poll。

--with-poll_module --without-poll_module

啟用或禁用構(gòu)建一個模塊來允許服務(wù)器使用poll()方法岔留。該模塊將自動建立夏哭,如果平臺不支持的kqueue,epoll献联,rtsig或/dev/poll竖配。

--without-http_gzip_module

不編譯壓縮的HTTP服務(wù)器的響應(yīng)模塊。編譯并運行此模塊需要zlib庫里逆。

--without-http_rewrite_module

不編譯重寫模塊进胯。編譯并運行此模塊需要PCRE庫支持。

--without-http_proxy_module

不編譯http_proxy模塊原押。

--with-http_ssl_module

使用https協(xié)議模塊胁镐。默認(rèn)沒有被構(gòu)建。建立并運行此模塊的OpenSSL庫是必需的诸衔。

--with-pcre=path

設(shè)置PCRE庫的源碼路徑 盯漂。

--with-pcre-jit

編譯PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)笨农。

--with-zlib=path

設(shè)置的zlib庫的源碼路徑

--with-cc-opt=parameters

設(shè)置額外的參數(shù)將被添加到CFLAGS變量

--with-ld-opt=parameters —設(shè)置附加的參數(shù)

常見編譯nginx安裝出錯

錯誤1: ./configure: error: the HTTP rewrite module requires the PCRE library. 解決方案: yum install -y pcre-devel 錯誤2: ./configure: error: SSL modules require the OpenSSL library. 解決方案: yum install -y openssl-devel make && make install 或者指定 OpenSSL

執(zhí)行啟動文件查看狀態(tài)

0

編譯安裝成功就缆。

0

安裝依賴模塊

如果需要的話,可以在編譯./configure的時候?qū)⑿枰囊蕾嚹K包安裝上

一般需要先裝pcre 為了重寫rewrite

① 選定源碼目錄

    可以是任何目錄谒亦,本文選定的是/usr/local/src
cd /usr/local/src

② 下載安裝PCRE庫

cd /usr/local/src wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz

③ 安裝PCRE庫

tar -zxvf pcre-8.44.tar.gz cd pcre-8.44 ./configure make make install

安裝zlib庫為了gzip壓縮

④ 選定源碼目錄

    可以是任何目錄竭宰,本文選定的是/usr/local/src
cd /usr/local/src

⑤ 下載安裝 zlib 庫

cd /usr/local/src wget http://zlib.net/zlib-1.2.11.tar.gz

⑥ 安裝zlib庫

tar -zxvf zlib-1.2.11.tar.gz cd zlib-1.2.11 ./configure make make install

安裝ssl(有些vps默認(rèn)沒裝ssl或者版本過低)

⑦ 下載安裝 openssl 庫

cd /usr/local/src     wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz

⑧ 安裝 openssl庫

tar -zxvf openssl-1.1.1g.tar.gz cd openssl-1.1.1g ./configure make make install

全局配置

0

事件驅(qū)動類型

0

修改liunx默認(rèn)最大文件數(shù)命令如下

cat <<EOF > /etc/security/limits.d/99-nofile.conf root soft nofile 102400 root hard nofile 102400 EOF  

事件驅(qū)動模型對比

select,poll和epoll

select poll
select每次收集事件時份招,比如有100萬連接的套接字切揭,會把他們?nèi)慷紓鹘o系統(tǒng),交給操作系統(tǒng)來尋找這些連接上有沒有未處理的事件脾还,會占用巨大的資源來處理伴箩,往往在select收集事件的連接時,這100萬的連接中的大部分都是沒有事件發(fā)生的鄙漏。

epoll如何處理

它在Linux內(nèi)核中申請了一個簡易的文件系統(tǒng),把原先的一個select或者poll調(diào)用分成了3個部分:

  1. 調(diào)用 epoll_create建立1個epoll對象(在epoll文件系統(tǒng)中給這個句柄分配資源)
  2. 調(diào)用 epoll_ctl向epoll對象中添加這100萬個連接的套接字
  3. 調(diào)用 epoll_wait 收集發(fā)生事件的連接棺蛛。

這樣怔蚌,只需要在進程啟動時建立1個epoll對象,并在需要的時候向它添加或刪除連接就可以了旁赊,因此桦踊,在實際收集事件時,epoll_wait的效率就會非常高终畅,因為調(diào)用epoll_wait時并沒有向它傳遞這100萬個連接籍胯,內(nèi)核也不需要去遍歷全部的連接竟闪。

網(wǎng)站服務(wù)配置

整體規(guī)劃:

http {
server {
location { }
location { }
location { }
}
}

server{ } 一對server就是nginx的一個虛擬主機
location{ } 定義客戶端的URI地址,根據(jù)URI地址不同杖狼,給客戶端不同的響應(yīng),需要使用正則表達式

具體配置:

0
$remote_addr: 客戶端地址
$remote_user: 客戶端用戶
$time_local: 訪問時間
$request: HTTP請求(方法炼蛤、HTTP版本、URI地址)
$status HTTP狀態(tài)碼
$body_bytes_sent HTTP請求報文大小
$http_referer 超鏈接地址
$http_user_agent 客戶端瀏覽器類型
$http_x_forwarded_for 客戶端地址
0

location配置示例

客戶端所訪問的URI的地址其實是location里面的root后面的目錄名+location后面的URI的組合

示例1:希望客戶端訪問ip就可以看到下面的首頁

mkdir -p /web/htdocs echo "Nginx test page" > /web/htdocs/index.html

修改默認(rèn)的location

vim /app/nginx/conf/nginx.conf 
location / { root /web/htdocs; index index.html index.htm; }

檢查nginx語法

/app/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加載配置文件

/app/nginx/sbin/nginx -s reload

測試

links --dump 192.168.122.153

Nginx test page

示例2:客戶端訪問http://192.168.122.153/bbs , 可看到/web/bbs目錄下的頁面

mkdir /web/bbs echo "Nginx bbs test page" > /web/bbs/index.html
修改默認(rèn)的location
vim /app/nginx/conf/nginx.conf 
location /bbs { root /web; index index.html index.htm; }

client在訪問時蝶涩,http://192.168.122.153/ 理朋,這個左斜杠代表的就是配置文件中root后面的目錄,

這個目錄后面在加上客戶端寫的URI的地址就是尋找網(wǎng)站首頁的地方绿聘。URI的地址就是網(wǎng)站主目錄下面的低一級目錄嗽上。

檢查語法

/app/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

重新加載文件

/app/nginx/sbin/nginx -s reload

測試

links --dump 192.168.122.153/bbs

Nginx bbs test page
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熄攘,隨后出現(xiàn)的幾起案子兽愤,更是在濱河造成了極大的恐慌,老刑警劉巖挪圾,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烹看,死亡現(xiàn)場離奇詭異,居然都是意外死亡洛史,警方通過查閱死者的電腦和手機惯殊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來也殖,“玉大人土思,你說我怎么就攤上這事∫涫龋” “怎么了己儒?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長捆毫。 經(jīng)常有香客問我闪湾,道長,這世上最難降的妖魔是什么绩卤? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任途样,我火速辦了婚禮,結(jié)果婚禮上濒憋,老公的妹妹穿的比我還像新娘何暇。我一直安慰自己,他們只是感情好凛驮,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布裆站。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宏胯。 梳的紋絲不亂的頭發(fā)上羽嫡,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機與錄音肩袍,去河邊找鬼杭棵。 笑死,一個胖子當(dāng)著我的面吹牛了牛,可吹牛的內(nèi)容都是我干的颜屠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼鹰祸,長吁一口氣:“原來是場噩夢啊……” “哼甫窟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蛙婴,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤粗井,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后街图,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浇衬,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年餐济,在試婚紗的時候發(fā)現(xiàn)自己被綠了耘擂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡絮姆,死狀恐怖醉冤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情篙悯,我是刑警寧澤蚁阳,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站鸽照,受9級特大地震影響螺捐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜矮燎,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一定血、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漏峰,春花似錦糠悼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靖苇,卻和暖如春席噩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贤壁。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工悼枢, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脾拆。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓馒索,卻偏偏與公主長得像,于是被迫代替她去往敵國和親名船。 傳聞我的和親對象是個殘疾皇子绰上,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容