Nginx高效服务器
Nginx 是一个免费的开源 Linux 应用程序,用于 Web 服务器。它通过将 Web 流量定向到特定服务器来充当反向代理服务器。 Nginx 用于安全和负载平衡,但也可以作为 Web 服务器独立运行。
Nginx简介
Nginx是一款轻量级的Web服务器,特点是高性能、高并发。它由俄罗斯程序设计师Igor Sysoev开发,供俄国大型入口网站及搜索引擎Rambler使用。 Nginx在BSD-like协议下发行,是一款高性能Web服务器,目前在Web服务器中排名第二。 虽然Apache还是全球Web服务器的“老大”,但是Nginx已经占到了Wed服务器市场22%以上的份额,是成长最快的Web服务器。Nginx使用了大量的高并发和低内存占用技术,并使用了高可靠性技术,拥有高过Apache一个数量级以上的接入能力。因为并发能力强的特点,Nginx在中国的互联网公司中得到了大量应用,中国的大型互联网公司无一不使用了Nginx,以应对中国众多的网民,以及各种抢购热潮(如“双十一”)、世界杯等热点事件。Nginx在这种大量的流量涌入、需要分流、导流、反向代理的场合下得到大量应用。
Nginx的特点
与其他Web服务器相比,Nginx具有以下显著特点。
- 速度更快 Nginx使用了预读、连接池、内存池等技术,使得单次HTTP请求速度更快。同时,因为其整体的多进程架构以及轻任务思想,在更多连接的情况下(以万为单位的并发情况下),Nginx比其他Web服务器速度更快。
- 扩展性好 Nginx的结构是“核心+模块”的结构,Nginx本身就是一个基于Epoll或Kqueue的事件处理和分发架构,管理HTTP主流程,其他功能都可以通过模块实现。模块专注于自身功能实现,可以更稳定,模块的升级和修复不影响其他功能以及核心本身。模块可以不断添加或升级,如事件(event)模块、代理模块、过滤模块、请求地址获取模块、地址转换模块、应答处理模块、日志模块等。Nginx提供了众多的模块以供选择,可以配置出不同行为的Web服务器。 Nginx提供了C级别的模块开发机制,但C级别的开发需要遵从复杂的数据结构。现在可以通过ngx_lua模块以Lua脚本实现业务逻辑。得益于Lua协程的支持,ngx_lua在万级并发请求时只占用很少的内存,而性能都是万级(Operation Per Second,每秒操作次数),这使得Nginx的扩展性更好。
- 高可靠性 得益于整体架构的优秀以及模块设计的简单性,Nginx拥有极高的可靠性,在各大型网站中得到了认可。Nginx核心由一个任务很轻的管理进程(master进程)和若干工作进程(worker进程)组成。具体的HTTP请求在工作进程内负载均衡,如果某个工作进程异常终止了,管理进程会迅速重启一个新的工作进程接替该进程。
- 低内存占用 一般情况下,10000个非活跃的HTTP保活连接仅占用2.5MB内存。而ngx_lua每扩展10000个连接也仅占2.xMB内存,使得Nginx可以大量部署。
- 高并发能力 一般Nginx是部署在万级以上的场合下。为了应付海量的请求,各网站都需要单机能处理峰值10万以上并发请求的Web服务器。理论上,Nginx处理能力的上限仅受内存限制,简单的业务场景下Nginx还可以提供更高的处理能力。 Nginx全异步、非阻塞I/O的思想贯穿在核心、模块以及ngx_lua模块中,无论是自己实现的模块,还是通过Lua实现的脚本代码,都是非阻塞地高速运行。
- 热部署 因为Nginx的管理进程和工作进程是分开设计的,所以可以实现热部署功能,即能在系统不间断的情况下升级可执行程序、更新配置文件、更新日志文件等。
- 开源 Nginx遵守相对自由的BSD协议。用户可以自由使用Nginx,还可以自由修改和使用Nginx的源码。用户可以在节省大量时间和成本的情况下,得到一个高性能的服务器框架。
Nginx的安装
Nginx的启动
启动Nginx,可以执行以下命令。假设Nginx安装在/usr/local/nginx/目录中,那么启动Nginx的命令就是:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
参数“-c”指定了配置文件的路径,如果不加“-c”参数,Nginx会默认加载其安装目录的conf子目录中的nginx.conf文件,在本例中即:/usr/local/nginx/sbin/nginx/conf/nginx.conf。
Nginx的停止
Nginx的停止方法有很多种,一般通过发送系统信号给Nginx主进程的方式来停止Nginx。
如果在nginx.conf配置文件中指定了pid文件存放的路径(例如:pid/usr/local/webserver/nginx/logs/nginx.pid;),该文件中存放的就是Nginx当前的主进程号。如果没有指定pid文件存放的路径,nginx.pid文件默认存放在Nginx安装目录的logs目录下。
我们可以直接通过以下命令来完成平滑重启,省下寻找Nginx主进程号的步骤: