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!_NGINX -简介
Nginx(发音同enginex)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师IgorSysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:新浪、网易、腾讯等。
nginx map
nginx!_NGINX -优点
?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不间断运行,即使运行数个月也不需要重新启动。你还能够不间断服务的情况下进行软件版本的升级。
nginx!_NGINX -功能
支持的操作系统
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支持。
nginx!_NGINX -安装
模块依赖性
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命令来检查一下当前的选项列表。
nginx!_NGINX -使用技巧
对于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 -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)还没有办法关闭到后端服务器的缓存.
nginx!_NGINX -NginxRewrite
1.NginxRewrite基本标记(flags)复制内容到剪贴板代码:last