
【軟件介紹】
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理服務(wù)器,也是一個 IMAP/POP3/SMTP 代理服務(wù)器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)的,第一個公開版本0.1.0發(fā)布于2004年10月4日。其將源代碼以類BSD許可證的形式發(fā)布,因它的穩(wěn)定性、豐富的功能集、示例配置文件和低系統(tǒng)資源的消耗而聞名。Nginx 可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系統(tǒng)中運行。Nginx相較于Apache、lighttpd具有占有內(nèi)存少,穩(wěn)定性高等優(yōu)勢,并且依靠并發(fā)能力強,豐富的模塊庫以及友好靈活的配置而聞名。 在Linux操作系統(tǒng)下,nginx使用epoll事件模型,得益于此,nginx在Linux操作系統(tǒng)下效率相當(dāng)高。同時Nginx在OpenBSD或FreeBSD操作系統(tǒng)上采用類似于epoll的高效事件模型kqueue。

【軟件特性】
基本的HTTP服務(wù)器特性處理靜態(tài)文件,索引文件以及自動索引;打開文件描述符緩存;
使用緩存加速反向代理;簡單負載均衡以及容錯;
遠程FastCGI服務(wù)的緩存加速支持;簡單的負載均衡以及容錯;
模塊化的架構(gòu)。過濾器包括gzip壓縮、ranges支持、chunked響應(yīng)、XSLT,SSI以及圖像縮放。在SSI 過濾器中,一個包含多個SSI的頁面,如果經(jīng)由FastCGI或反向代理處理,可被并行處理;
支持SSL,TLS SNI。
其他的HTTP服務(wù)器特性
基于名字和IP的虛擬主機;
Keep-alive和pipelined連接支持;
靈活的配置;
重新加載配置以及在線升級時,不需要中斷正在處理的請求;
自定義訪問日志格式,帶緩存的日志寫操作以及快速日志輪轉(zhuǎn);
3xx-5xx錯誤代碼重定向;
重寫(rewrite)模塊;
基于客戶端IP地址和HTTP基本認證機制的訪問控制;
支持PUT、DELETE、MKCOL、COPY以及MOVE方法;
支持FLV流和MP4流;
速度限制;
來自同一地址的同時連接數(shù)或請求數(shù)限制;
嵌入Perl語言。
郵件代理服務(wù)器特性
使用外部HTTP認證服務(wù)器重定向用戶到IMAP/POP3后端;
使用外部HTTP認證服務(wù)器認證用戶后重定向連接到內(nèi)部SMTP后端;
支持的認證方式:
POP3: USER/PASS, APOP, AUTH LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN, AUTH LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;
SSL支持;
STARTTLS和STLS支持。
架構(gòu)和擴展性
一個主進程和多個工作進程,工作進程以非特權(quán)用戶運行;
支持的事件機制:kqueue(FreeBSD 4.1+)、epoll(Linux 2.6+)、rt signals(Linux 2.2.19+)、/dev/poll(Solaris 7 11/99+)、event ports(Solaris 10)、select以及poll;
眾多支持的kqueue特性包括EV_CLEAR、EV_DISABLE(臨時禁止事件)、NOTE_LOWAT、EV_EOF,可用數(shù)據(jù)的數(shù)量,錯誤代碼;
支持sendfile(FreeBSD 3.1+, Linux 2.2+, Mac OS X 10.5)、sendfile64(Linux 2.4.21+)和sendfilev(Solaris 8 7/01+);
文件AIO(FreeBSD 4.3+, Linux 2.6.22+);
Accept-filters(FreeBSD 4.1+)和 TCP_DEFER_ACCEPT(Linux 2.4+);
10000個非活躍的HTTP keep-alive連接僅占用約2.5M內(nèi)存;
盡可能避免數(shù)據(jù)拷貝操作。
測試過的操作系統(tǒng)和平臺
FreeBSD 3 — 8 / i386; FreeBSD 5 — 9 / amd64;
Linux 2.2 — 2.6 / i386; Linux 2.6 / amd64;
Solaris 9 / i386, sun4u; Solaris 10 / i386, amd64, sun4v;
MacOS X / ppc, i386;
Windows XP, Windows Server 2003.

【軟件特色】
Nginx因為它的穩(wěn)定性、豐富的模塊庫、靈活的配置和低系統(tǒng)資源的消耗而聞名.業(yè)界一致認為它是Apache2.2+mod_proxy_balancer的輕量級代替者,不僅是因為響應(yīng)靜態(tài)頁面的速度非常快,而且它的模塊數(shù)量達到Apache的近2/3。對和 rewrite模塊的支持很徹底,還支持mod_fcgi、ssl、vhosts ,適合用來做mongrel clusters的前端HTTP響應(yīng)。做為HTTP服務(wù)器,有以下幾項基本特性:
處理靜態(tài)文件,索引文件以及自動索引;打開文件描述符緩沖.無緩存的反向代理加速,簡單的負載均衡和容錯.,簡單的負載均衡和容錯.
模塊化的結(jié)構(gòu)。包括gzipping, byte ranges, chunked responses,以及 SSI-filter等filter。如果由FastCGI或其它代理服務(wù)器處理單頁中存在的多個SSI,則這項處理可以并行運行,而不需要相互等待。
支持SSL 和 TLSSNI.
專為性能優(yōu)化而開發(fā),性能是其最重要的考量,實現(xiàn)上非常注重效率 。它支持內(nèi)核Poll模型,能經(jīng)受高負載的考驗,有報告表明能支持高達 50,000個并發(fā)連接數(shù)。
具有很高的穩(wěn)定性。其它HTTP服務(wù)器,當(dāng)遇到訪問的峰值,或者有人惡意發(fā)起慢速連接時,也很可能會導(dǎo)致服務(wù)器物理內(nèi)存耗盡頻繁交換,失去響應(yīng),只能重啟服務(wù)器。例如當(dāng)前apache一旦上到200個以上進程,web響應(yīng)速度就明顯非常緩慢了。而Nginx采取了分階段資源分配技術(shù),使得它的CPU與內(nèi)存占用率非常低。nginx官方表示保持10,000個沒有活動的連接,它只占2.5M內(nèi)存,所以類似DOS這樣的攻擊對nginx來說基本上是毫無用處的。就穩(wěn)定性而言,nginx比lighttpd更勝一籌。
支持熱部署。它的啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運行,即使運行數(shù)個月也不需要重新啟動。你還能夠在不間斷服務(wù)的情況下,對軟件版本進行進行升級。
采用master-slave模型,能夠充分利用SMP的優(yōu)勢,且能夠減少工作進程在磁盤I/O的阻塞延遲。當(dāng)采用select()/poll()調(diào)用時,還可以限制每個進程的連接數(shù)。
代碼質(zhì)量非常高,代碼很規(guī)范,手法成熟, 模塊擴展也很容易。特別值得一提的是強大的Upstream與Filter鏈。 Upstream為諸如reverse proxy,與其他服務(wù)器通信模塊的編寫奠定了很好的基礎(chǔ)。而Filter鏈最酷的部分就是各個filter不必等待前一個filter執(zhí)行完畢。它可以把前一個filter的輸出做為當(dāng)前filter的輸入,這有點像Unix的管線。這意味著,一個模塊可以開始壓縮從后端服務(wù)器發(fā)送過來的請求,且可以在模塊接收完后端服務(wù)器的整個請求之前把壓縮流轉(zhuǎn)向客戶端。
采用了一些os提供的最新特性如對sendfile (Linux2.2+),accept-filter (FreeBSD4.1+),TCP_DEFER_ACCEPT (Linux 2.4+)的支持,從而大大提高了性能。
當(dāng)然,nginx還很年輕,多多少少存在一些問題,比如:Nginx是俄羅斯人創(chuàng)建,目前文檔方面還不是很完善.因為文檔大多是俄語,所以文檔方面這也是個障礙.盡管nignx的模塊比較多,但它們還不夠完善。對腳本的支持力度不夠。
這些問題,nginx的作者和社區(qū)都在努力解決,我們有理由相信nginx將繼續(xù)以高速的增長率來分享輕量級HTTP Web服務(wù)器市場,會有一個更美好的未來。

【軟件功能】
支持操作系統(tǒng)
FreeBSD 3.x,4.x,5.x,6.x i386; FreeBSD 5.x,6.x amd64;
Linux 2.2,2.4,2.6 i386; Linux 2.6 amd64;
Solaris 8 i386; Solaris 9 i386 and sun4u; Solaris 10 i386;
MacOS X (10.4) PPC;
Windows XP,Windows Server 2003和Windows 7等。
結(jié)構(gòu)與擴展
一個主進程和多個工作進程。工作進程是單線程的,且不需要特殊授權(quán)即可運行;
kqueue (FreeBSD 4.1+),epoll (Linux 2.6+),rt signals (Linux 2.2.19+),/dev/poll (Solaris 7 11/99+),select,以及 poll 支持;
kqueue支持的不同功能包括 EV_CLEAR,EV_DISABLE (臨時禁止事件), NOTE_LOWAT,EV_EOF,有效數(shù)據(jù)的數(shù)目,錯誤代碼;
sendfile (FreeBSD 3.1+),sendfile (Linux 2.2+),sendfile64 (Linux 2.4.21+),和 sendfilev (Solaris 8 7/01+) 支持;
輸入過濾 (FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持;
10,000 非活動的 HTTP keep-alive 連接僅需要 2.5M內(nèi)存。
最小化的數(shù)據(jù)拷貝操作;
其他HTTP功能:
基于IP 和名稱的虛擬主機服務(wù);
Memcached 的 GET 接口;
支持 keep-alive 和管道連接;
靈活簡單的配置;
重新配置和在線升級而無須中斷客戶的工作進程;
可定制的訪問日志,日志寫入緩存,以及快捷的日志回卷;
4xx-5xx錯誤代碼重定向;
基于 PCRE 的 rewrite 重寫模塊;
基于客戶端IP 地址和 HTTP 基本認證的訪問控制;
PUT,DELETE,和 MKCOL 方法;
支持 FLV (Flash 視頻);
帶寬限制。
實驗特性
內(nèi)嵌的 perl;
通過 aio_read()/aio_write() 的套接字工作的實驗?zāi)K,僅在 FreeBSD 下;
對線程的實驗化支持,F(xiàn)reeBSD 4.x 的實現(xiàn)基于 rfork();
Nginx 主要的英語站點是 http://sysoev. ru/en/;
英語文檔草稿由 Aleksandar Lazic 完成 點擊。
HTTP基礎(chǔ)功能
處理靜態(tài)文件,索引文件以及自動索引;
反向代理加速(無緩存),簡單的負載均衡和容錯;
FastCGI,簡單的負載均衡和容錯;
模塊化的結(jié)構(gòu)。過濾器包括gzipping,byte ranges,chunked responses,以及 SSI-filter。在SSI過濾器中,到同一個 proxy 或者 FastCGI 的多個子請求并發(fā)處理;
SSL 和 TLS SNI 支持;
IMAP/POP3代理服務(wù)功能:
使用外部 HTTP 認證服務(wù)器重定向用戶到 IMAP/POP3 后端;
使用外部 HTTP 認證服務(wù)器認證用戶后連接重定向到內(nèi)部的 SMTP 后端;
其他HTTP功能
基于名稱和基于IP的虛擬服務(wù)器;
Keep-alive and pipelined connections support;保持活動和支持管線連接;
Flexible configuration;靈活的配置;
Reconfiguration and online upgrade without interruption of the client processing;重載配置,無間斷程序升級;
Access log formats,bufferred log writing,and quick log rotation;訪問日志格式,bufferred日志寫,快速登錄旋轉(zhuǎn);
3xx-5xx error codes redirection; 3xx的- 5xx錯誤代碼重定向;
The rewrite module;重寫模塊;
Access control based on client IP address and HTTP Basic authentication;基于客戶端IP地址訪問控制和HTTP基本認證;
The PUT,DELETE,MKCOL,COPY and MOVE methods; 提交,刪除,MKCOL,復(fù)制和移動方法;
FLV streaming;FLV視頻流;
Speed limitation;速度限制;
Limitation of simultaneous connections or requests from one address.限制同個IP地址請求數(shù)量。
Embedded perl.嵌入式的Perl。
郵件代理服務(wù)器功能
用戶重定向到IMAP/POP3后端使用外部HTTP認證服務(wù)器;
User authentication using an external HTTP authentication server and connection redirection to internal SMTP backend;用戶身份驗證使用外部HTTP認證服務(wù)器和連接重定向到內(nèi)部的SMTP后端;
Authentication methods:驗證方法:
POP3: USER/PASS,APOP,AUTH LOGIN/PLAIN/CRAM-MD5;的POP3:用戶名/密碼,的APOP,AUTH的LOGIN/PLAIN/CRAM-MD5;
IMAP: LOGIN,AUTH LOGIN/PLAIN/CRAM-MD5; IMAP的:登錄,AUTH的LOGIN/PLAIN/CRAM-MD5;
SMTP: AUTH LOGIN/PLAIN/CRAM-MD5;的SMTP:AUTH的LOGIN/PLAIN/CRAM-MD5;
SSL support; SSL支持;
STARTTLS and STLS support. STARTTLS的和補充的支持。
認證方法
POP3: POP3 USER/PASS,APOP,AUTH LOGIN PLAIN CRAM-MD5;
IMAP: IMAP LOGIN;
SMTP: AUTH LOGIN PLAIN CRAM-MD5;
SSL 支持;
在 IMAP 和 POP3 模式下的 STARTTLS 和 STLS 支持。
【安裝教程】
1.、下載nginx安裝包。下載后進行解壓,將解壓后的文件放到自己心儀的目錄下,我的解壓文件放在了d盤根目錄下,如下圖所示:
2、進入window的cmd窗口,輸入如下圖所示的命令,進入到nginx目錄,使用“start nginx.exe ”進行nginx的安裝,如下圖所示:
3、安裝成功后,在“任務(wù)管理器”中會看到“nginx.exe”進程,如下圖所示:
4、在瀏覽器地址欄輸入:127.0.0.1,會看到如下圖所示的nginx歡迎界面
相應(yīng)的命令:
nginx.exe -s stop //停止nginx
nginx.exe -s reload //重新加載nginx
nginx.exe -s quit //退出nginx
注:以上的命令中,.exe可以去掉
相應(yīng)命令的操作如下圖所示:
如果nginx還是啟動失敗需要查看nginx日志文件logs/error.log,如果該文件不存在需要查看Windows事件日志中。
同時需要注意的是
1.windows下nginx配置文件中的目錄請使用“/”,而不是“”做目錄分隔
2.windows下的nginx只有一個有效的工作進程
3.windows vista以后系統(tǒng)的不支持nginx的cache模塊和需要共享內(nèi)存支持的模塊。
4.widows下的nginx支持最大1024個并發(fā)連接
【配置教程】
Nginx配置教程:
Nginx使用有兩三年了,現(xiàn)在經(jīng)常碰到有新用戶問一些很基本的問題,我也沒時間一一回答,今天下午花了點時間,結(jié)合自己的使用經(jīng)驗,把Nginx的主要配置參數(shù)說明分享一下,也參考了一些網(wǎng)絡(luò)的內(nèi)容,這篇是目前最完整的Nginx配置參數(shù)中文說明了。
在此記錄下Nginx服務(wù)器nginx.conf的配置文件說明, 部分注釋收集與網(wǎng)絡(luò).
#運行用戶
user www-data;
#啟動進程,通常設(shè)置成和cpu的數(shù)量相等
worker_processes 1;
#全局錯誤日志及PID文件
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
#工作模式及連接數(shù)上限
events {
use epoll; #epoll是多路復(fù)用IO(I/O Multiplexing)中的一種方式,但是僅用于linux2.6以上內(nèi)核,可以大大提高nginx的性能
worker_connections 1024;#單個后臺worker process進程的最大并發(fā)鏈接數(shù)
# multi_accept on;
}
#設(shè)定http服務(wù)器,利用它的反向代理功能提供負載均衡支持
http {
#設(shè)定mime類型,類型由mime.type文件定義
include /etc/nginx/mime.types;
default_type application/octet-stream;
#設(shè)定日志格式
access_log /var/log/nginx/access.log;
#sendfile 指令指定 nginx 是否調(diào)用 sendfile 函數(shù)(zero copy 方式)來輸出文件,對于普通應(yīng)用,
#必須設(shè)為 on,如果用來進行下載等應(yīng)用磁盤IO重負載應(yīng)用,可設(shè)置為 off,以平衡磁盤與網(wǎng)絡(luò)I/O處理速度,降低系統(tǒng)的uptime.
sendfile on;
#tcp_nopush on;
#連接超時時間
#keepalive_timeout 0;
keepalive_timeout 65;
tcp_nodelay on;
#開啟gzip壓縮
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
#設(shè)定請求緩沖
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#設(shè)定負載均衡的服務(wù)器列表
upstream mysvr {
#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
#本機上的Squid開啟3128端口
server 192.168.8.1:3128 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
server {
#偵聽80端口
listen 80;
#定義使用www.xx.com訪問
server_name www.xx.com;
#設(shè)定本虛擬主機的訪問日志
access_log logs/www.xx.com.access.log main;
#默認請求
location / {
root /root; #定義服務(wù)器的默認網(wǎng)站根目錄位置
index index.php index.html index.htm; #定義首頁索引文件的名稱
fastcgi_pass www.xx.com;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
# 定義錯誤提示頁面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /root;
}
#靜態(tài)文件,nginx自己處理
location ~ ^/(images|javascript|js|css|flash|media|static)/ {
root /var/www/virtual/htdocs;
#過期30天,靜態(tài)文件不怎么更新,過期可以設(shè)大一點,如果頻繁更新,則可以設(shè)置得小一點。
expires 30d;
}
#PHP 腳本請求全部轉(zhuǎn)發(fā)到 FastCGI處理. 使用FastCGI默認配置.
location ~ \.php$ {
root /root;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name;
include fastcgi_params;
}
#設(shè)定查看Nginx狀態(tài)的地址
location /NginxStatus {
stub_status on;
access_log on;
auth_basic "NginxStatus";
auth_basic_user_file conf/htpasswd;
}
#禁止訪問 .htxxx 文件
location ~ /\.ht {
deny all;
}
}
}
以上是一些基本的配置,使用Nginx最大的好處就是負載均衡
如果要使用負載均衡的話,可以修改配置http節(jié)點如下:
#設(shè)定http服務(wù)器,利用它的反向代理功能提供負載均衡支持
http {
#設(shè)定mime類型,類型由mime.type文件定義
include /etc/nginx/mime.types;
default_type application/octet-stream;
#設(shè)定日志格式
access_log /var/log/nginx/access.log;
#省略上文有的一些配置節(jié)點
#。。。。。。。。。。
#設(shè)定負載均衡的服務(wù)器列表
upstream mysvr {
#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
server 192.168.8.1x:3128 weight=5;#本機上的Squid開啟3128端口
server 192.168.8.2x:80 weight=1;
server 192.168.8.3x:80 weight=6;
}
upstream mysvr2 {
#weigth參數(shù)表示權(quán)值,權(quán)值越高被分配到的幾率越大
server 192.168.8.x:80 weight=1;
server 192.168.8.x:80 weight=6;
}
#第一個虛擬服務(wù)器
server {
#偵聽192.168.8.x的80端口
listen 80;
server_name 192.168.8.x;
#對aspx后綴的進行負載均衡請求
location ~ .*\.aspx$ {
root /root; #定義服務(wù)器的默認網(wǎng)站根目錄位置
index index.php index.html index.htm; #定義首頁索引文件的名稱
proxy_pass http://mysvr ;#請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
#以下是一些反向代理的配置可刪除.
proxy_redirect off;
#后端的Web服務(wù)器可以通過X-Forwarded-For獲取用戶真實IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m; #允許客戶端請求的最大單文件字節(jié)數(shù)
client_body_buffer_size 128k; #緩沖區(qū)代理緩沖用戶端請求的最大字節(jié)數(shù),
proxy_connect_timeout 90; #nginx跟后端服務(wù)器連接超時時間(代理連接超時)
proxy_send_timeout 90; #后端服務(wù)器數(shù)據(jù)回傳時間(代理發(fā)送超時)
proxy_read_timeout 90; #連接成功后,后端服務(wù)器響應(yīng)時間(代理接收超時)
proxy_buffer_size 4k; #設(shè)置代理服務(wù)器(nginx)保存用戶頭信息的緩沖區(qū)大小
proxy_buffers 4 32k; #proxy_buffers緩沖區(qū),網(wǎng)頁平均在32k以下的話,這樣設(shè)置
proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2)
proxy_temp_file_write_size 64k; #設(shè)定緩存文件夾大小,大于這個值,將從upstream服務(wù)器傳
}
}
}


































