一、Nginx介绍
1. nginx是什么?毋庸置疑它是一个web服务器,类似的,apache、lighttpd、tomcat、jetty、IIS都是web服务器。它们都具有web服务器的基本功能:基于rest架构风格,以同意资源描述符或者统一资源定位符作为沟通的依据,通过http为浏览器邓客户端提供各种网络服务。
对于上述所提到的web服务器,分别具有各自的特点和弊端
例如,tomcat和jetty都是面向java语言的,生来就是重量级的web服务器,性能和nginx没有可比性。
IIS只能在windows操作系统上运行,windows作为服务器的稳定性不如其他操作系统,在需要高性能的web服务器的场合下一般不会被使用。
Apache有许多的优点,稳定、开源、跨平台等,但是它兴起的年代互联网的闺蜜远远落后于现在,所以它当时的设计就比较偏向重量级,当比较多的apache进程切换时会消耗大量的cpu资源,消耗服务器上大量的内存,导致http请求的响应速度降低。
Lighttpd和nginx一样都是轻量级、高性能的web服务器,国内公司比较倾向使用nginx。
2.nginx的诞生:nginx是由俄罗斯的Igor Sysoev使用c语言开发并将其代码开源。
3.nginx的特点:
更快:无论是在单次还是在数以万计的并发请求,nginx可以比其他web服务器更快的响应请求。
高扩展性:nginx由多个不同功能和层次耦合性极低的模块组成,当对一个模块进行修复或者升级只需要关注模块自身。
高可靠性:主要是因为当master进程在1个worker进程出错时可以快速拉起新的worker子进程提供服务。
低内存消耗:10000个非活跃的http keep-alive连接在nginx中仅消耗2.5MB的内存。
单机支持10万以上的并发连接
热部署:master管理进程和worker工作进程分离设计,即可以支持不间断的服务以及不停止服务就可以更新配置项和更换日志文件等功能。
最核心的特点是支持高并发请求并可以保持高效的服务。
二、使用nginx的必备软件以及编译安装nginx
1.GCC编译器、PCRE库(支持正则表达式,nginx的http模块需要其进行解析正则表达式)、OpenSSL(支持更安全的ssl协议传输http)、zlib库(可以对指定的类型的http响应使用gzip进行压缩来减少网络传输量)。
2.安装nginx命令:
./configure 该段命令的作用是检测操作系统内核和已经安装的软件以及参数的解析并生成Makefile文件。
make 根据configure生成的makefile 文件编译nginx并生成目标文件和最终的二进制文件。
make install 根据configure执行时的参数将nginx部署到指定的安装目录,相关目录的建立和配置文件的复制。
3.configure时的相关参数
路径相关参数
--prefix=PATH nginx安装部署后的根目录,默认目录/usr/local/nginx
--sbin-path=PATH 可执行文件的放置路径 根目录/sbin/nginx
--conf-path=PATH 配置文件放置的路径 根目录/conf/nginx.conf
编译相关的参数
--with-cpp=PATH c预编译器的路径
依赖软件的相关参数
--without-pcre
--with-zlib=DIR
默认不编译进nginx的http模块
--with-http_ssl_module
--with-http_realip_module 可以从客户端请求里的header信息中获得真正的客户端IP地址
--with-http_stub_status_module 可以让运行中的nginx提供性能统计页面,获取并发连接和请求的信息
其他参数
--add-module=PATH 添加第三方模块
--user=USER nginx worker进程运行时所属的用户,不要将启动worker进程的用户设置为root,在worker进程出问题时master进程要具备停止/启动worker进程的能力
--group=GROUP nginx worker进程运行时所属的组
三、nginx命令行控制
1.nginx的默认启动方式
/usr/local/nginx/sbin/nginx
该命令会默认读取配置文件:/usr/local/nginx/conf/nginx.conf
2.测试配置信息是否有错误
/usr/local/nginx/sbin/nginx -t
使用参数-t测试配置文件是否有误
3.显示版本信息
/usr/local/nginx/sbin/nginx -v(小写)
4.显示编译阶段的参数
/usr/local/nginx/sbin/nginx -V(大写)
可以显示配置编译阶段的信息,执行configure时的参数
5.快速停止服务
/usr/local/nginx/sbin/nginx -s stop
-s参数是告诉nginx程序像正在运行的nginx发送信号量,nginx程序通过nginx.pid文件中的master得到进程的进程id,再像运行中的master进程发送term信号来快速的关闭nginx服务。
6.优雅停止服务
/usr/local/nginx/sbin/nginx -s quit
快速停止服务是worker进程和master进程在收到信号后会立即跳出循环退出程序,优雅的停止服务时,首先会关闭监听的端口,停止接收新的连接后把当前正在处理的连接全部处理完再退出进程。
7.使运行中的nginx重新读取配置项并生效
/usr/local/nginx/sbin/nginx -s reload
该命令,nginx会先检查新的配置项是否有误,如果全部正确就以优雅的方式关闭再重新启动nginx,其中-s是发送信号
8.日志文件回滚
/usr/local/nginx/sbin/nginx -s reopen
重新打开日志文件,将当前的日志文件改名转移到其他目录中进行备份再重新打开时就会生成新的日志文件,这样可以使日志文件不至于过大
9.平滑升级nginx
kill -s SIGUSR2 nginx master pid
运行中的nginx会将pid文件重命名,然后用启动命令启动新版本。