NGINX

NGINX

Nginx ("engine x") 是一個高性能的 HTTP 和反向代理伺服器,也是一個 IMAP/POP3/SMTP 代理伺服器。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發布於2004年10月4日。其將原始碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置檔案和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發布。 Nginx是一款輕量級的Web 伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like 協定下發行。由俄羅斯的程式設計師Igor Sysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是占有記憶體少,並發能力強,事實上nginx的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:新浪、網易、騰訊等。

基本信息

簡介

Nginx(發音同enginex)是一款輕量級的Web伺服器/反向代理伺服器及電子郵件(IMAP/POP3)代理伺服器,並在一個BSD-like協定下發行。由俄羅斯的程式設計師IgorSysoev所開發,供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。其特點是占有記憶體少,並發能力強,事實上nginx的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用nginx網站用戶有:新浪、網易、騰訊等。
nginx mapnginx map

優點

​Nginx可以在大多數UnixlikeOS上編譯運行,並有Windows移植版。Nginx的1.4.0穩定版已經於2013年4月24日發布,一般情況下,對於新建站點,建議使用最新穩定版作為生產版本,已有站點的升級急迫性不高。Nginx的原始碼使用2-clauseBSD-likelicense。
Nginx是一個很強大的高性能Web和反向代理伺服器,它具有很多非常優越的特性:
在高連線並發的情況下,Nginx是Apache伺服器不錯的替代品:Nginx在美國是做虛擬主機生意的老闆們經常選擇的軟體平台之一。能夠支持高達50,000個並發連線數的回響,感謝Nginx為我們選擇了epollandkqueue作為開發模型。

伺服器

Nginx作為負載均衡伺服器:Nginx既可以在內部直接支持Rails和PHP程式對外進行服務,也可以支持作為HTTP代理伺服器對外進行服務。Nginx採用C進行編寫,不論是系統資源開銷還是CPU使用效率都比Perlbal要好很多。

代碼

Nginx代碼完全用C語言從頭寫成,已經移植到許多體系結構和操作系統,包括:Linux、FreeBSD、Solaris、MacOSX、AIX以及MicrosoftWindows。Nginx有自己的函式館,並且除了zlib、PCRE和OpenSSL之外,標準模組只使用系統C庫函式。而且,如果不需要或者考慮到潛在的授權衝突,可以不使用這些第三方庫。

郵件代理伺服器

作為郵件代理伺服器:Nginx同時也是一個非常優秀的郵件代理伺服器(最早開發這個產品的目的之一也是作為郵件代理伺服器),Last.fm描述了成功並且美妙的使用經驗。
Nginx是一個安裝非常的簡單,配置檔案非常簡潔(還能夠支持perl語法),Bugs非常少的伺服器:Nginx啟動特別容易,並且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟體版本的升級

功能

支持的作業系統

FreeBSD3.x,4.x,5.x,6.xi386;FreeBSD5.x,6.xamd64;
Linux2.2,2.4,2.6i386;Linux2.6amd64;
Solaris8i386;Solaris9i386andsun4u;Solaris10i386;
MacOSX(10.4)PPC;
WindowsXP,WindowsServer2003和Windows7等。

結構與擴展

一個主進程和多個工作進程。工作進程是單執行緒的,且不需要特殊授權即可運行;
kqueue(FreeBSD4.1+),epoll(Linux2.6+),rtsignals(Linux2.2.19+),/dev/poll(Solaris711/99+),select,以及poll支持;
kqueue支持的不同功能包括EV_CLEAR,EV_DISABLE(臨時禁止事件),NOTE_LOWAT,EV_EOF,有效數據的數目,錯誤代碼;
sendfile(FreeBSD3.1+),sendfile(Linux2.2+),sendfile64(Linux2.4.21+),和sendfilev(Solaris87/01+)支持;
輸入過濾(FreeBSD4.1+)以及TCP_DEFER_ACCEPT(Linux2.4+)支持;
10,000非活動的HTTPkeep-alive連線僅需要2.5M記憶體。
最小化的數據拷貝操作;
其他HTTP功能:
基於IP和名稱的虛擬主機服務;
Memcached的GET接口;
支持keep-alive和管道連線;
靈活簡單的配置;
重新配置和線上升級而無須中斷客戶的工作進程;
可定製的訪問日誌,日誌寫入快取,以及快捷的日誌回卷;
4xx-5xx錯誤代碼重定向;
基於PCRE的rewrite重寫模組;
基於客戶端IP位址和HTTP基本認證的訪問控制;
PUT,DELETE,和MKCOL方法;
支持FLV(Flash視頻);
頻寬限制。

實驗特性

內嵌的perl;
通過aio_read()/aio_write()的套接字工作的實驗模組,僅在FreeBSD下;
對執行緒的實驗化支持,FreeBSD4.x的實現基於rfork();
Nginx主要的英語站點是http://sysoev.ru/en/;
英語文檔草稿由AleksandarLazic完成點擊。

HTTP基礎功能

處理靜態檔案,索引檔案以及自動索引;
反向代理加速(無快取),簡單的負載均衡和容錯;
FastCGI,簡單的負載均衡和容錯;
模組化的結構。過濾器包括gzipping,byteranges,chunkedresponses,以及SSI-filter。在SSI過濾器中,到同一個proxy或者FastCGI的多個子請求並發處理;
SSL和TLSSNI支持;
IMAP/POP3代理服務功能:
使用外部HTTP認證伺服器重定向用戶到IMAP/POP3後端;
使用外部HTTP認證伺服器認證用戶後連線重定向到內部的SMTP後端;

其他HTTP功能

基於名稱和基於IP的虛擬伺服器;
Keep-aliveandpipelinedconnectionssupport;保持活動和支持管線連線;
Flexibleconfiguration;靈活的配置;
Reconfigurationandonlineupgradewithoutinterruptionoftheclientprocessing;重載配置,無間斷程式升級;
Accesslogformats,bufferredlogwriting,andquicklogrotation;訪問日誌格式,bufferred日誌寫,快速登錄旋轉;
3xx-5xxerrorcodesredirection;3xx的-5xx錯誤代碼重定向;
Therewritemodule;重寫模組;
AccesscontrolbasedonclientIPaddressandHTTPBasicauthentication;基於客戶端IP位址訪問控制和HTTP基本認證;
ThePUT,DELETE,MKCOL,COPYandMOVEmethods;提交,刪除,MKCOL,複製和移動方法;
FLVstreaming;FLV視頻流;
Speedlimitation;速度限制;
Limitationofsimultaneousconnectionsorrequestsfromoneaddress.限制同個IP位址請求數量。
Embeddedperl.嵌入式的Perl。
郵件代理伺服器功能
用戶重定向到IMAP/POP3後端使用外部HTTP認證伺服器;
UserauthenticationusinganexternalHTTPauthenticationserverandconnectionredirectiontointernalSMTPbackend;用戶身份驗證使用外部HTTP認證伺服器和連線重定向到內部的SMTP後端;
Authenticationmethods:驗證方法:
POP3:USER/PASS,APOP,AUTHLOGIN/PLAIN/CRAM-MD5;的POP3:用戶名/密碼,的APOP,AUTH的LOGIN/PLAIN/CRAM-MD5;
IMAP:LOGIN,AUTHLOGIN/PLAIN/CRAM-MD5;IMAP的:登錄,AUTH的LOGIN/PLAIN/CRAM-MD5;
SMTP:AUTHLOGIN/PLAIN/CRAM-MD5;的SMTP:AUTH的LOGIN/PLAIN/CRAM-MD5;
SSLsupport;SSL支持;
STARTTLSandSTLSsupport.STARTTLS的和補充的支持。
認證方法
POP3:POP3USER/PASS,APOP,AUTHLOGINPLAINCRAM-MD5;
IMAP:IMAPLOGIN;
SMTP:AUTHLOGINPLAINCRAM-MD5;
SSL支持;
在IMAP和POP3模式下的STARTTLS和STLS支持。

安裝

模組依賴性

gzip模組需要zlib庫
rewrite模組需要pcre庫
ssl功能需要openssl庫

預先編譯好的安裝包

Nginx在一些Linux發行版和BSD的各個變種版本的安裝包倉庫中都會有,通過各個系統自帶的軟體包管理方法即可安裝。需要注意的是,很多預先編譯好的安裝包都比較陳舊,大多數情況下還是推薦直接從源碼編譯。

官方原始碼下載

特定平台的安裝和記錄
Nginx在Slackware上的編譯安裝腳本
Nginx在ubuntu和debian上的安裝及腳本,debian針對nginx包的官方下載站點
使用原始碼進行構建
Nginx使用Unix下常用的'./configure&&make&&makeinstall'過程來編譯安裝。
configure腳本確定系統所具有一些特性,特別是nginx用來處理連線的方法。然後,它創建Makefile檔案。
configure支持下面的選項:
--prefix=<path>-Nginx安裝路徑。如果沒有指定,默認為/usr/local/nginx。
--sbin-path=<path>-Nginx執行檔安裝路徑。只能安裝時指定,如果沒有指定,默認為<prefix>/sbin/nginx。
--conf-path=<path>-在沒有給定-c選項下默認的nginx.conf的路徑。如果沒有指定,默認為<prefix>/conf/nginx.conf。
--pid-path=<path>-在nginx.conf中沒有指定pid指令的情況下,默認的nginx.pid的路徑。如果沒有指定,默認為<prefix>/logs/nginx.pid。
--lock-path=<path>-nginx.lock檔案的路徑。
--error-log-path=<path>-在nginx.conf中沒有指定error_log指令的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認為<prefix>/logs/error.log。
--http-log-path=<path>-在nginx.conf中沒有指定access_log指令的情況下,默認的訪問日誌的路徑。如果沒有指定,默認為<prefix>/logs/access.log。
--user=<user>-在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的用戶。如果沒有指定,默認為nobody。
--group=<group>-在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的組。如果沒有指定,默認為nobody。
--builddir=DIR-指定編譯的目錄
--with-rtsig_module-啟用rtsig模組
--with-select_module--without-select_module-Whetherornottoenabletheselectmodule.Thismoduleisenabledbydefaultifamoresuitablemethodsuchaskqueue,epoll,rtsigor/dev/pollisnotdiscoveredbyconfigure.
//允許或不允許開啟SELECT模式,如果configure沒有找到更合適的模式,比如:kqueue(sunos),epoll(linuxkenel2.6+),rtsig(實時信號)或者/dev/poll(一種類似select的模式,底層實現與SELECT基本相同,都是採用輪訓方法)SELECT模式將是默認安裝模式
--with-poll_module--without-poll_module-Whetherornottoenablethepollmodule.Thismoduleisenabledbydefaultifamoresuitablemethodsuchaskqueue,epoll,rtsigor/dev/pollisnotdiscoveredbyconfigure.
--with-http_ssl_module-Enablengx_http_ssl_module.EnablesSSLsupportandtheabilitytohandleHTTPSrequests.RequiresOpenSSL.OnDebian,thisislibssl-dev.
//開啟HTTPSSL模組,使NGINX可以支持HTTPS請求。這個模組需要已經安裝了OPENSSL,在DEBIAN上是libssl
--with-http_realip_module-啟用ngx_http_realip_module
--with-http_addition_module-啟用ngx_http_addition_module
--with-http_sub_module-啟用ngx_http_sub_module
--with-http_dav_module-啟用ngx_http_dav_module
--with-http_flv_module-啟用ngx_http_flv_module
--with-http_stub_status_module-啟用"serverstatus"頁
--without-http_charset_module-禁用ngx_http_charset_module
--without-http_gzip_module-禁用ngx_http_gzip_module.如果啟用,需要zlib。
--without-http_ssi_module-禁用ngx_http_ssi_module
--without-http_userid_module-禁用ngx_http_userid_module
--without-http_access_module-禁用ngx_http_access_module
--without-http_auth_basic_module-禁用ngx_http_auth_basic_module
--without-http_autoindex_module-禁用ngx_http_autoindex_module
--without-http_geo_module-禁用ngx_http_geo_module
--without-http_map_module-禁用ngx_http_map_module
--without-http_referer_module-禁用ngx_http_referer_module
--without-http_rewrite_module-禁用ngx_http_rewrite_module.如果啟用需要PCRE。
--without-http_proxy_module-禁用ngx_http_proxy_module
--without-http_fastcgi_module-禁用ngx_http_fastcgi_module
--without-http_memcached_module-禁用ngx_http_memcached_module
--without-http_limit_zone_module-禁用ngx_http_limit_zone_module
--without-http_empty_gif_module-禁用ngx_http_empty_gif_module
--without-http_browser_module-禁用ngx_http_browser_module
--without-http_upstream_ip_hash_module-禁用ngx_http_upstream_ip_hash_module
--with-http_perl_module-啟用ngx_http_perl_module
--with-perl_modules_path=PATH-指定perl模組的路徑
--with-perl=PATH-指定perl執行檔案的路徑
--http-log-path=PATH-Setpathtothehttpaccesslog
--http-client-body-temp-path=PATH-Setpathtothehttpclientrequestbodytemporaryfiles
--http-proxy-temp-path=PATH-Setpathtothehttpproxytemporaryfiles
--http-fastcgi-temp-path=PATH-Setpathtothehttpfastcgitemporaryfiles
--without-http-禁用HTTPserver
--with-mail-啟用IMAP4/POP3/SMTP代理模組
--with-mail_ssl_module-啟用ngx_mail_ssl_module
--with-cc=PATH-指定C編譯器的路徑
--with-cpp=PATH-指定C預處理器的路徑
--with-cc-opt=OPTIONS-AdditionalparameterswhichwillbeaddedtothevariableCFLAGS.WiththeuseofthesystemlibraryPCREinFreeBSD,itisnecessarytoindicate--with-cc-opt="-I/usr/local/include".Ifweareusingselect()anditisnecessarytoincreasethenumberoffiledescriptors,thenthisalsocanbeassignedhere:--with-cc-opt="-DFD_SETSIZE=2048".
--with-ld-opt=OPTIONS-Additionalparameterspassedtothelinker.WiththeuseofthesystemlibraryPCREinFreeBSD,itisnecessarytoindicate--with-ld-opt="-L/usr/local/lib".
--with-cpu-opt=CPU-為特定的CPU編譯,有效的值包括:pentium,pentiumpro,pentium3,pentium4,athlon,opteron,amd64,sparc32,sparc64,ppc64
--without-pcre-禁止PCRE庫的使用。同時也會禁止HTTPrewrite模組。在"location"配置指令中的正則表達式也需要PCRE。
--with-pcre=DIR-指定PCRE庫的原始碼的路徑。
--with-pcre-opt=OPTIONS-SetadditionaloptionsforPCREbuilding.
--with-md5=DIR-Setpathtomd5librarysources.
--with-md5-opt=OPTIONS-Setadditionaloptionsformd5building.
--with-md5-asm-Usemd5assemblersources.
--with-sha1=DIR-Setpathtosha1librarysources.
--with-sha1-opt=OPTIONS-Setadditionaloptionsforsha1building.
--with-sha1-asm-Usesha1assemblersources.
--with-zlib=DIR-Setpathtozliblibrarysources.
--with-zlib-opt=OPTIONS-Setadditionaloptionsforzlibbuilding.
--with-zlib-asm=CPU-UsezlibassemblersourcesoptimizedforspecifiedCPU,validvaluesare:pentium,pentiumpro
--with-openssl=DIR-SetpathtoOpenSSLlibrarysources
--with-openssl-opt=OPTIONS-SetadditionaloptionsforOpenSSLbuilding
--with-debug-啟用調試日誌
--add-module=PATH-Addinathird-partymodulefoundindirectoryPATH
在不同版本間,選項可能會有些許變化,請總是使用./configure--help命令來檢查一下當前的選項列表。

使用技巧

對於chroot的支持是否在計畫之中
在什麼情況下使用Nginx比使用squid要好?反之亦然。
大體上來說nginx主要用於反向加速代理而不是像squid那樣做為常規代理伺服器。Nginx的最大優勢在於高負載情況下記憶體和CPU的低消耗。我不認為squid能給你帶來比nginx更好的性能。
有沒有人能給出一個完整的.conf配置檔案來詳細的解讀一下怎么配置和測試IMAP模組,而不只是關於IMAP的隻言片語啊?
依照[NginxImapProxyExample]開始你的配置.關於不同配置參數的具體信息,請查看[NginxMailCoreModule]頁。
示例1:用運行於apache上的php腳本做後端驗證
示例2:使用運行於同一個伺服器的nginx-embedded-perl模組作為imap/pop代理和認證後端
某些東東不工作
(URL重寫,代理,路徑,...)
例如:如URL重寫(rewrite)不工作了或者是unix的路徑(/$PATH)的問題云云...
請仔細閱讀[NginxDebugging]並且逐行查看錯誤日誌。
如果你沒找到錯誤打起精神試著到IRC或郵件列表里說明一下你碰到的問題。
有沒有其它類似的Web伺服器
Cherokee
Lighttpd(Lighty)
thttpd
關於各自的優缺點請使用自己喜歡的搜尋引擎查找
讓Nginx成為以postfix做為後端的SMTP代理
Nginx使用什麼算法來實現負載均衡它能實現基於連線數的負載均衡嗎?
Nginx使用簡單的輪巡算法,所以無法做基本連結計數的負載均衡。這個可能會在將來的版本中有所改變。
我能關閉從代理伺服器到後端伺服器的快取嗎或者使用上傳進度特性?

Nginx反向代理實踐

.nginx+substitutions安裝
nginx自帶一個Substitution模組,但該模組只能寫一行,所以我們改用substitutions
下面是安裝一些預備軟體
yum-y--nopluginsinstallwgetzip
yum-y--nopluginsinstallunzip
yum-y--nopluginsinstallgcc
yum-y--nopluginsinstallmake
yum-y--nopluginsinstallpcre-devel
yum-y--nopluginsinstallopenssl-devel
編譯軟體
tarzxfnginx-1.0.8.tar.gz
cdnginx-1.0.8.tar.gz
./configure./configure--add-module=path/substitutions4nginx-read-only//注意這裡的path是相對應的真實路徑
make
makeinstall
配置nginx.conf
此時,nginx應該安裝在於/usr/local/nginx下面
server_nameservername;
location/{
subs_filterca-pub-**********ca-pub-**********;//把googlead的用戶號ca-pub-9805743306566114改成你自己的,比如ca-pub-**********
subs_filter********************;//把googlead的廣告號**********改成你自己的,比如**********,你懂的!:D
proxy_pass這裡是填寫需要代理的網址;//反向代理站。
indexindex.htmlindex.htm;
}
記住subs_filter命令的格式即可隨意發揮想像力替換你想替換的廣告、超連結,等等。
基於太多人詢問下面的問題:
我能為了得到上傳進度而關閉代理的快取嗎
使用nginx我怎么才能給用戶顯示上傳進度
到目前為止(2007-Apr-26)還沒有辦法關閉到後端伺服器的快取.

NginxRewrite

1.NginxRewrite基本標記(flags)複製內容到剪貼簿代碼:last–基本上都用這個Flag。
break–中止Rewirte,不在繼續匹配
redirect–返回臨時重定向的HTTP狀態302
permanent–返回永久重定向的HTTP狀態301
2.正則表達式匹配,其中:代碼:
CODE:
*——為區分大小寫匹配
*——*為不區分大小寫匹配
*!——和!——*分別為區分大小寫不匹配及不區分大小寫不匹配
3.檔案及目錄匹配,其中:代碼:
CODE:
*-f和!-f用來判斷是否存在檔案
*-d和!-d用來判斷是否存在目錄
*-e和!-e用來判斷是否存在檔案或目錄
*-x和!-x用來判斷檔案是否可執行
4.Nginx的一些可用的全局變數,可用做條件判斷:
代碼:
CODE:
$args
$content_length
$content_type
$document_root
$document_uri
$host
$http_user_agent
$http_cookie
$limit_rate
$request_body_file
$request_method
$remote_addr
$remote_port
$remote_user
$request_filename
$request_uri
$query_string
$scheme
$server_protocol
$server_addr
$server_name
$server_port
$uri

配置

cls
@ECHOOFF
SETNGINX_PATH=D:
SETNGINX_DIR=D:\nginx-1.3.6\
color0a
TITLENginx管理程式PowerByChenJianxiang
GOTOMENU
:MENU
CLS
ECHO.
ECHO.****Nginx管理程式PowerByChenJianxiang***
ECHO.**
ECHO.*1啟動Nginx*
ECHO.**
ECHO.*2關閉Nginx*
ECHO.**
ECHO.*3重啟Nginx*
ECHO.**
ECHO.*4退出*
ECHO.**
ECHO.************************
ECHO.
ECHO.請輸入選擇項目的序號:
set/pID=
IF"%id%"=="1"GOTOcmd1
IF"%id%"=="2"GOTOcmd2
IF"%id%"=="3"GOTOcmd3
IF"%id%"=="4"EXIT
PAUSE
:cmd1
ECHO.
ECHO.啟動Nginx......
IFNOTEXIST%NGINX_DIR%nginx.exeECHO%NGINX_DIR%nginx.exe不存在
%NGINX_PATH%
cd%NGINX_DIR%
IFEXIST%NGINX_DIR%nginx.exestart%NGINX_DIR%nginx.exe
ECHO.OK
PAUSE
GOTOMENU
:cmd2
ECHO.
ECHO.關閉Nginx......
taskkill/F/IMnginx.exe>nul
ECHO.OK
PAUSE
GOTOMENU
:cmd3
ECHO.
ECHO.關閉Nginx......
taskkill/F/IMnginx.exe>nul
ECHO.OK
GOTOcmd1
GOTOMENU

版本發布

2012年08月22日,Nginx1.3.5開發版發布。
2012年09月12日,Nginx1.3.6開發版發布。
2012年12月11日,Nginx1.2.6穩定版發布
2013年02月12日,Nginx1.2.7穩定版發布
2013年02月19日,Nginx1.3.13開發版發布
2013年04月03日,Nginx1.2.8穩定版發布。
2013年04月16日,Nginx1.3.16開發者版本發布。
2013年04月24日,Nginx1.4.0穩定版發布。
2013年05月07日,Nginx1.4.1穩定版發布。
2013年05月07日,Nginx1.5.0開發版本發布。
2013年06月04日,Nginx1.5.1主版本發布。
2013年07月02日,Nginx1.5.2開發版發布。
2013年07月17日,Nginx1.4.2穩定版發布。
2013年07月30日,Nginx1.5.3開發版本發布。
2013年08月27日,Nginx1.5.4開發版本發布。
2013年09月17日,Nginx1.5.5開發版本發布。

相關詞條

相關搜尋

熱門詞條

聯絡我們