nginx入门
项目上用到Nginx啦,学习一下。
什么是Nginx
Nginx(Engine X)是一款轻量级、高性能的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在一个BSD-LIKE协议下发行。由俄罗斯的程序设计师Lgor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用。特点是占有内存少,并发能力强。事实上Nginx的并发能力的确在同类型的网页服务器中表现良好。
为什么要使用Nginx
互联网高速发展的今天,大用户量、高并发已经成为互联网的主体,怎样才能让一个网站能够承载几万个或十几万个用户的持续访问是一些中小型网站急需解决的问题。
用单机Tomcat搭建的网站,在比较理想的状态下能够承受的并发访问量在150到200左右。按照并发访问量占用户量的5%到10%这样计算,单点Tomcat网站的用户人数在1500到4000左右,对于一个为全国范围提供服务的站点来说显然是不够用的。为了解决这个问题,引入了负载均衡方法。
负载均衡就是一个Web服务器解决不了的问题可以通过多个Web服务器来平均分担压力来解决。并发过来的请求被平均分配到多个后台Web服务器来处理,这样压力就被分解开来。
负载均衡服务器分为两种,一种是通过硬件实现的负载均衡服务器,简称硬负载,例如F5。另一种是通过软件来实现的负载均衡,简称软负载,例如Apache和Nginx。硬负载和软负载相比,前者作用的网络层次比较多,可以作用到Socket接口的数据链路层,对发出的请求进行分组转发,但是价格成本比较贵;而软负载作用的层次在HTTP协议层之上,可以对HTTP请求进行分组转发,并且因为是开源的所以成本几乎为0,并且阿里巴巴,京东等电商网站使用的都是Nginx服务器。
Nginx相对于Apache的优点
1.高并发响应性能非常好,官方Nginx处理静态文件并发5W/s(官方测试能够支撑5万并发链接)。
2.反向代理性能非常强(可用于负载均衡)。
3.内存和CPU的占用率低(约为Apache的1/5~1/10)。
4.对后端服务有健康检查功能。
5.支持PHP的cgi方式fastcgi方式。
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中的epoll模型
Nginx是一个事件驱动架构的Web服务器,使用epoll来驱动事件的处理。
Nginx的高并发得益于其采用了epoll模型,与传统的服务器程序架构不同,epoll是linux内核2.6以后才出现的。Nginx采用epoll模型,异步非阻塞,而Apache采用的是select模型。
select模型:select选择句柄的时候,是遍历所有的句柄,也就是说句柄有事件响应时,select模型需要遍历所有句柄才能获取到哪些句柄有事件通知,因此效率非常低。
epoll模型:epoll模型对于句柄事件的选择不是遍历的,而是事件响应的,就是句柄上事件来就马上选择出来,不需要遍历整个句柄链表,因此效率非常高。
Nginx的安装与启动
Windows下的Nginx安装非常简单(不用安装,解压可用,有exe文件),去Nginx官网上下载相应的压缩包即可:http://nginx.org/en/download.html。
解压完成后得到此目录结构,双击nginx.exe即可启动Nginx(傻瓜式)。
启动成功后,在任务管理器中会看到nginx.exe进程。
在浏览器地址栏输入127.0.0.1或localhost就会看到Nginx的欢迎页面。
如果发现进程里没有相应进程,说明安装失败,可以到Nginx根目录下的logs文件夹下的error文件查看具体的错误,以便排查解决问题。
Nginx的常用命令
Nginx提供一些常用的使用命令:
nginx -s stop 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。
nginx -s quit 平稳关闭Nginx,保存相关信息,有安排的结束web服务。
nginx -s reload 因改变了Nginx相关配置,需要重新加载配置而重载。
nginx -s reopen 重新打开日志文件。
nginx -c filename 为 Nginx 指定一个配置文件,来代替缺省的。
nginx -t 不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。
nginx -v 显示 nginx 的版本。
nginx -V 显示 nginx 的版本,编译器版本和配置参数。
如果不想每次都敲命令,可以在Nginx安装目录下添加相应的批处理文件。下面是一个启动的批处理文件startup.bat:
@echo off
rem 如果启动前已经启动nginx并记录下pid文件,会kill指定进程
nginx.exe -s stop
rem 测试配置文件语法正确性
nginx.exe -t -c conf/nginx.conf
rem 显示版本信息
nginx.exe -v
rem 按照指定配置去启动nginx
nginx.exe -c conf/nginx.conf
如果是在Linux下运行,则可以写shell脚本,大同小异。
Nginx的配置
Nginx的默认配置文件是在根目录的conf目录下的nginx.conf文件。 也可以使用nignx -c命令指定其他配置文件。
配置的入门又该是另外的篇幅了。
"要勇敢拥抱生活,不要害怕自己的热情,也不要害怕生活的冰冷。"