Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由俄羅斯的程序設計師Igor Sysoev爲俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。
Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特點是佔有內存少,併發能力強。在高併發連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作爲7層負載均衡服務器來使用。Nginx 0.8.46 + PHP 5.2.14 (FastCGI) 可以承受3萬以上的併發連接數,相當於同等環境下Apache的10倍。
自Nginx 發佈四年來,Nginx 已經因爲它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名了。目前國內各大門戶網站已經部署了Nginx,如京東、新浪、網易、騰訊、淘寶等;國內幾個重要的視頻分享網站也部署了Nginx,如六房間、酷6等。
Nginx工作模式(轉)
Nginx由內核和模塊組成,其中,內核的設計非常微小和簡潔,完成的工作也非常簡單,僅僅通過查找配置文件將客戶端請求映射到一個location block(location是Nginx配置中的一個指令,用於URL匹配),而在這個location中所配置的每個指令將會啓動不同的模塊去完成相應的工作。
Nginx的模塊從結構上分爲核心模塊、基礎模塊和第三方模塊,HTTP模塊、EVENT模塊和MAIL模塊等屬於核心模塊,HTTP Access模塊、HTTP FastCGI模塊、HTTP Proxy模塊和HTTP Rewrite模塊屬於基本模塊,而HTTP Upstream Request Hash模塊、Notice模塊和HTTP Access Key模塊屬於第三方模塊,用戶根據自己的需要開發的模塊都屬於第三方模塊。正是有了這麼多模塊的支撐,Nginx的功能纔會如此強大。
Nginx的模塊從功能上分爲三類,分別是:
Handlers(處理器模塊)。此類模塊直接處理請求,並進行輸出內容和修改headers信息等操作。handlers處理器模塊一般只能有一個。
Filters (過濾器模塊)。此類模塊主要對其他處理器模塊輸出的內容進行修改操作,最後由Nginx 輸出。
Proxies (代理類模塊)。就是Nginx 的HTTP Upstream 之類的模塊
在工作方式上,Nginx分爲單工作進程和多工作進程兩種模式。
在單工作進程模式下,除主進程外,還有一個工作進程,工作進程是單線程的;
在多工作進程模式下,每個工作進程包含多個線程。
Nginx默認爲單工作進程模式。
Nginx的模塊直接被編譯進Nginx,因此屬於靜態編譯方式。啓動Nginx後,Nginx的模塊被自動加載,不像在Apache一樣,首先將模塊編譯爲一個so文件,然後在配置文件中指定是否進行加載。在解析配置文件時,Nginx的每個模塊都有可能去處理某個請求,但是同一個處理請求只能由一個模塊來完成。
如果由FastCGI或其它代理服務器處理單頁中存在的多個SSI,則這項處理可以並行運行,而不需要相互等待。
Nginx 通過事件驅動相應多個用戶,使用一個工作線程來響應多個不同的用戶請求
prework 是一個進程響應一個用戶請求
worker是一個線程響應一個用戶請求
爲此nginx適合於高併發的場景需求,並且nginx對靜態內容響應較快,但是nginx不支持CGI
在應用是nginx時,nginx主要是工作在web的前端,實現反向代理
LNMP環境的搭建——Nginx
1.Nginx安裝
所需軟件包:nginx-1.8.0.tar.gz
tar zxf nginx-1.8.0.tar.gz
cd nginx-1.8.0 yum install pcre-devel openssl-devel -y ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module
make make install
vim /root/.bash_profile
source /root/.bash_profile
cd /usr/local/lnmp/nginx/sbin/ ./nginx -t ##檢測 ./nginx ##服務開啓腳本
curl -I localhost ##檢測http協議提供程序
##開機啓動##
vim /etc/rc.local
在最後加上nginx
nginx -s
nginx -h
2.屏蔽nginx版本
rm -rf /root/nginx-1.8.0 /usr/local/lnmp/nginx tar zxf nginx-1.8.0.tar.gz ##重新解壓nginx源碼包
vim /root/nginx-1.8.0/src/core/nginx.h ##僞裝版本
將“nginx/”後面部分刪除
vim /root/nginx-1.8.0/auto/cc/gcc ##關閉debug調式
將debug部分註釋掉
cd nginx-1.8.0 ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module make make install
nginx -t ##檢測nginx配置 nginx -s reload ##加載配置
useradd -s /sbin/nologin -d /usr/local/lnmp/nginx nginx
vim /usr/local/lnmp/nginx/conf/nginx.conf user nginx nginx; ##用戶和組,可以只寫用戶 worker_processes 2; ##cpu個數,不能超過lscup
events { use epoll; ##nginx epoll 採用異步非阻塞模式 apache --select 同步阻塞機制 io複用模型類型 worker_connections 4096; ##連接數 }
3.開啓https
將server這一段註釋去掉,將cert.key改爲cert.pem(注意要在{}內)
cd /etc/pki/tls/certs/ make cert.pem
cp cert.pem /usr/local/lnmp/nginx/conf/
nginx -t nginx -s reload
4.nginx 監控小插件
vim /usr/local/lnmp/nginx/conf/nginx.conf
增加以下內容(##/status 名字自定義):
nginx -t nginx -s reload
訪問 ip/status
5.nginx 虛擬主機
在/usr/local/lnmp/nginx/conf/nginx.conf最後加上以下部分(注意後面“}”):
mkdir /web{1..2} echo www.linux.org > /web1/index.html echo www.unix.org > /web2/index.html nginx -t nginx -s reload
6.nginx 負載均衡套件
在server2和server3做以下工作:
yum install httpd -y cd /var/www/html/ echo server2/3.example.com > index.html
在/usr/local/lnmp/nginx/conf/nginx.conf最後加上以下部分(注意後面那個括號):
nginx -t nginx -s reload
訪問www.linux.org 測試