是一個高性能的web服務器和反向代理服務器html
http://www.nginx.cn/
nginx中文手冊 linux
1 支持高併發:能支持幾萬併發鏈接(特別是靜態小文件業務環境)nginx
2 資源消耗少: 在三萬併發鏈接下,開啓10個nginx線程消耗的內存不到200MBweb
3 能夠作HTTP反向代理及加速緩存、既負載均衡功能、內置對RS節點服務器健康檢查功能、這至關於Haproxy軟件或LVS的功能緩存
4 具有squid 等專業緩存軟件等的緩存功能tomcat
5 支持異步網絡I/O事件橫行epoll(linux2.6+)服務器
Nginx做爲Web服務器的主要應用場景:網絡
1)使用Nginx運行HTML、JS、CSS、小圖片等靜態數據(此功能相似lighttpd軟件)。併發
2)Nginx結合FastCGI運行PHP等動態程序(例如使用fastcgi_pass方式)。app
3)Nginx結合tomcat/resin等支持Java動態程序(經常使用proxy_pass方式)。
正向代理 由內向外 代替局域網內pc,請求外部應用服務
反向代理 由外向內 代替外部的用戶 請求內部的應用服務器
負載均衡 轉發給內部的web服務器
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的這種機制,可以高效地處理成千上萬的併發鏈接,而且性能不會隨着鏈接數増加而降低太多。
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操做完成後 數據已經在進程內存了 再通知進程
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