Nginx学习交流2什么是Nginx?Nginx(“enginex”)是俄罗斯人IgorSysoev(塞索耶夫)编写的一款高性能的HTTP和反向代理服务器。在国内,已有多家网站使用Nginx作为Web服务器或反向代理服务器。3使用Nginx做七层负载均衡的理由1、高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。2、内存消耗少:在3万并发连接下,开启的10个Nginx进程才消耗150M内存(15M*10=150M)。3、配置文件非常简单:风格跟程序一样通俗易懂。4、成本低廉:Nginx为开源软件,可以免费使用。4使用Nginx做七层负载均衡的理由5、支持Rewrite重写规则:能够根据域名、URL的不同,将HTTP请求分到不同的后端服务器群组。6、内置的健康检查功能:如果NginxProxy后端的某台Web服务器宕机了,不会影响前端访问。7、节省带宽:支持GZIP压缩,可以添加浏览器本地缓存的Header头。8、稳定性高:用于反向代理,宕机的概率微乎其微。5为什么Nginx的性能要比Apache高主要是因为Nginx使用了最新的epoll(Linux2.6内核)和kqueue(FreeBSD)网络I/O模型,而Apache则使用的是传统的select模型6在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在内核源码中/usr/include/linux/posix_types.h中#undef__FD_SETSIZE#define__FD_SETSIZE1024如果想要同时检测1025个句柄的可读状态或可写状态,select是不能实现的。在内核中实现select是使用轮询方法,即每次检测都会遍历所有FD_SET中的句柄,显然,select函数的执行时间与FD检测的句柄数越多就会越费时。7epoll是多路复用IO(I/OMultiplexing)中的一种方式,仅用于linux2.6以上内核。而epoll模型它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体请查看:cat/proc/sys/fs/file-max,这个数目和系统内存关系很大。8解释select和epoll模型的工作方式select版大妈做的是如下的事情:比如同学甲的朋友来了,select版大妈比较笨,她带着朋友挨个房间进行查询谁是同学甲,你等的朋友来了。如果每到来一个朋友楼管大妈都要全楼的查询同学,那么处理的效率必然就低下了,过不久楼底就有不少的人了。epoll版大妈就比较先进了,她记下了同学甲的信息,比如说他的房间号,那么等同学甲的朋友到来时,只需要告诉该朋友同学甲在哪个房间即可,不用自己亲自带着人满大楼的找人了。epoll大妈可以不用吹灰之力就可以定位到同学甲。一看就很明白epoll和select模型的区别了吧。硬件、软件七层负载均衡对比:NetScaler与Nginx10编译安装Nginx、创建供Nginx使用的组和帐号:/usr/sbin/groupadd、编译安装支持模块a.gzipmodulerequireszliblibraryb.rewritemodulerequirespcrelibraryc.sslsupportrequiresopenssllibrary11编译安装Nginx3、编译安装Nginxwget===/usr/local/nginx--with-http_stub_status_module--with-http_ssl_modulemakemakeinstall192.168.100.249上的Nginx安装./configure-user===/usr/local/nginx\--with-http_stub_status_module\--add-module=/home/nginx-concat-module/\--add-module=/home/nginx_http_push_module-0.692\--add-module=/home/memc-nginx-module/\--add-module=/home/ngx_cache_purge-1.4\--add-module=/home/ngx_http_upstream_keepalive\--add-module=/home/srcache-nginx-modulemakemakeinstall编辑Nginx配置登录192.168.100.10cd/usr/local/webserver/nginx/confvimnginx.conf...14启动Nginx/usr/local/nginx/sbin/nginx–t如果屏幕显示以下两行信息,说明配置文件正确:theconfigurationfile/usr/local/nginx/conf/nginx.confsyntaxisoktheconfigurationfile/usr/local/nginx/conf/nginx.confwastestedsuccessfully那么,则可以启动Nginx服务:ulimit-SHn51200/usr/local/nginx/sbin/nginx15不中断服务平滑修改Nginx配置①、修改/usr/local/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:/usr/local/nginx/sbin/nginx-t②、这时,输入以下命令查看Nginx主进程号:ps-ef|grepnginx:masterprocess|grep-vgrep|awk-F'''{print$2}'屏幕显示的即为Nginx主进程号,例如:6302这时,执行以下命令即可使修改过的Nginx配置文件生效:kill-96302killallnginx./nginx-sreload或者用更简便的方法:kill-HUP`cat/usr/local/nginx/logs/nginx.pid`更方便的nginx启动添加到/etc/init.d/nginx文件中可参考192.168.100.249:/etc/init.d/nginx命令:servicenginxstop|start|status|restart|condrestart|try-restart|reload|force-reload|configtestNginx状态监控查看是否存在stub_status模块/usr/local/nginx/sbin/nginx-V(大写V)编辑nginx配置location/nginx_status{stub_statuson;access_logoff;allowSOME.IP.ADD.RESS;#允许的ip地址denyall;#全部禁止}重启nginx查看结果:49serveracceptshandledrequests813668638136686382132214Reading:0Writing:1Waiting:4818参数的意义activeconnections–当前Nginx正处理的活动连接数。serveracceptshandledrequests--总共处理了81366863个连接,成功创建81366863次握手(证明中间没有失败的),总共处理了82132214个请求(平均每次握手处理了1.009个数据请求)。19reading--nginx读取到客户端的Header信息数。writing--nginx返回给客户端的Header信息数。waiting--开启keep-alive的情况下,这个值等于active-(reading+writing),意思就是Nginx已经处理完正在等候下一次请求指令的驻留连接。下次的内容Nginx配置和语法Nginx的一些好用的模块插件和用途Lua简介关于Nginx_Lua谢谢大家!