nginx介紹1

1.1 nginx 是什麼?

是一個高性能的web服務器和反向代理服務器html

http://www.nginx.cn/
nginx中文手冊 linux

1.2 nginx的優勢

1 支持高併發:能支持幾萬併發鏈接(特別是靜態小文件業務環境)nginx

2 資源消耗少: 在三萬併發鏈接下,開啓10個nginx線程消耗的內存不到200MBweb

3 能夠作HTTP反向代理及加速緩存、既負載均衡功能、內置對RS節點服務器健康檢查功能、這至關於Haproxy軟件或LVS的功能緩存

4 具有squid 等專業緩存軟件等的緩存功能tomcat

5 支持異步網絡I/O事件橫行epoll(linux2.6+)服務器

1.3 nginx的應用場景

Nginx做爲Web服務器的主要應用場景:網絡

   1)使用Nginx運行HTML、JS、CSS、小圖片等靜態數據(此功能相似lighttpd軟件)。併發

   2)Nginx結合FastCGI運行PHP等動態程序(例如使用fastcgi_pass方式)。app

   3)Nginx結合tomcat/resin等支持Java動態程序(經常使用proxy_pass方式)。

1.4 正向代理、反向代理、負載均衡

正向代理 由內向外 代替局域網內pc,請求外部應用服務

反向代理 由外向內 代替外部的用戶 請求內部的應用服務器

負載均衡 轉發給內部的web服務器

1.5 爲何Nginx整體性能比Apache高?

Nginx使用最新的epoll(Linux2.6內核)和kqueue(freebsd)異步網絡I/O模型,

而Apache則使用的是傳統的select模型。

目前Linux下可以承受高併發訪問的Squid、Memcached軟件都採用的是epoll模型

第一個比喻:

 

假設你在大學讀書,住的宿舍樓有不少房間,你的朋友要來找你。select版宿管大媽就會帶着你的朋友到各房間挨個去找,直到找到你爲止。而epoll版宿管大媽會先記下每位入住同窗的房間號,你的朋友來找你時,只需告訴你的朋友你住在哪一個房間便可,不用親自帶着你的朋友滿宿舍樓找人了。若是同時來了100我的,都要找本身住這棟樓的同窗,select版和epoll版宿管大媽,誰的效率更高,就很明顯了。

 

第二個比喻:

 

select的調用複雜度是線性的,即O(n)。舉個例子,一個保姆照看照看一羣孩子,若是把孩子是否須要尿尿比做網絡I/O事件,select的做用就比如這個保姆挨個詢問每一個孩子"你要尿尿嗎?」若是孩子回答是,保姆則把孩子領出來放到另一個地方。當全部孩子詢問完以後,保姆領着這些要尿尿的孩子去上廁所(處理網絡I/O事件).在epoll機制下,保姆再也不須要挨個詢問每一個孩子是否須要尿尿。取而代之的是,若是孩子須要尿尿,他就本身主動站到事先約定好的地方,而保姆的職責就是查看事先約定好的地方是否有孩子。若是有小孩,則領着孩子去上廁所(網絡事件處理)。所以,epoll的這種機制,可以高效地處理成千上萬的併發鏈接,而且性能不會隨着鏈接數増加而降低太多。

1.5.1 IO的介紹

IO 簡單瞭解就是計算機的讀寫

 

IO的類型(關注消息通知機制)

同步IO

調用方向被調用方發起請求 被調用方接受請求時不當即返回消息 但一旦返回 則返回最終結果

異步IO

調用方向被調用方發起請求 被調用方接收到請求後返回確認信息,但不是最終結果; 請求處理完後,經過通知機制通知調用者

 

IO模型的介紹

好比cat 查看一個數據由進程通知內核 內核將數據從磁盤加載至內核內存 內核空間將數據cp到進程內存。此時IO過程分爲兩步, ①數據從磁盤加載至內核內存 ② 從內核內存cp一份至進程內存

阻塞IO : 進程在IO操做中 爲掛起狀態,進入不可中斷睡眠狀態 既阻塞IO

非阻塞IO:進程在IO操做①中 可執行其餘操做 可是須要不斷查看內核是否操做成功,既忙等待狀態,隨後進入進入IO②操做中,又爲阻塞狀態

多路複用IO:進程在IO操做中,加入select機制 經過select 同時處理多個IO 可是有上限1024 當併發超過1024後,又爲阻塞狀態

事件驅動式IO: 加入通知機制 通知機制分爲水平觸發(屢次通知),邊緣觸發(只通知一次)。進程在IO操做中,內核將數據加載至內核內存後,就通知進程。 

異步IO:加入select機制 通知機制(邊緣觸發) 而且是內核將IO操做完成後 數據已經在進程內存了 再通知進程

 

1.6 nginx的安裝

linux系統安裝軟件方法:

1)yum install nginx -y(rpm包,自動解決全部依賴軟件)

簡單,無法定製。

 

2)rpm -ivh rpm包(本身解決全部依賴軟件)

簡單,無法定製,無法自動解決全部依賴軟件

 

3)編譯安裝(c語言)

能夠定製,編譯過程複雜,時間長。

./configure 配置

make 編譯

make install 安裝

 

4)利用源碼製做符合企業需求的rpm軟件包,放到yum倉庫裏,最後yum安裝。

簡單,能夠隨意定製。

rpm包定製

http://blog.oldboyedu.com/autodeploy-rpm/

yum倉庫搭建

http://blog.oldboyedu.com/autodeploy-yum/

 

 

mkdir /home/oldboy/tools

cd /home/oldboy/tools

wget http://nginx.org/download/nginx-1.14.0.tar.gz

tar xf nginx-1.14.0.tar.gz

cd nginx-1.14.0

====================================

useradd -s /sbin/nologin www -M

yum install pcre pcre-devel -y

yum install openssl openssl-devel  -y

====================================

./configure  --user=www --group=www --prefix=/application/nginx-1.14.0/ --with-http_stub_status_module  --with-http_ssl_module --with-pcre

make

make istall

ln -s /application/nginx-1.14.0/ /application/nginx

 

echo $? 返回0表明步驟正確。

驗證:

 

[root@web01 nginx-1.14.0]# ls /application/nginx/

conf  html  logs  sbin

[root@web01 nginx-1.14.0]# /application/nginx/sbin/nginx

[root@web01 nginx-1.14.0]# lsof -i :80

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

nginx   8898 root    6u  IPv4  23954      0t0  TCP *:http (LISTEN)

nginx   8899  www    6u  IPv4  23954      0t0  TCP *:http (LISTEN)

[root@web01 nginx-1.14.0]# wget 10.0.0.7

--2018-06-22 12:36:30--  http://10.0.0.7/

Connecting to 10.0.0.7:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 612 [text/html]

Saving to: 「index.html」

OVER.

 

 

 

 

--prefix=PATH  路徑

--user=USER    用戶

--group=GROUP  組

--with-pcre    僞靜態

--with-http_stub_status_module 狀態

--with-http_ssl_module      加密 443

相關文章
相關標籤/搜索