目录
一、nginx的特点
那么nginx有哪些特点?
先讲nginx的优点:
缺点:
二、nginx与Apache的区别
三、nginx的应用场景
四、nginx为什么能支持高并发
五、为什么nginx不使用多线程
六、nginx的两种进程分别有什么作用
七、编译安装nginx,并实现版本平滑升级
1.关闭防火墙,将安装nginx所需软件包传到/opt目录下
2.安装依赖包
3.创建运行用户、组
4.编译安装Nginx
5.想要使用nginx命令直接启动服务,两种方式
6.详解nginx的命令
7.nginx版本编译安装平滑升级的方式
8.使用systemd管理的两种办法
方法一:添加nginx系统服务,可以通用centos5-7三个版本
方法二:使用systemd 进行管理
一、nginx的特点
首先介绍nginx是什么,再讲nginx的特点
nginx是一种轻量级/高性能的反向代理web服务器,用于HTTP、HTTPS、SMTP、POP3和IMAP协议,他实现非常高效的反向代理、负载均衡,可以支持处理2-3万的并发连接数,官方检测能支持5万并发,目前在中国为主流的web服务器。(因为咱国家人多)
那么nginx有哪些特点?
先讲nginx的优点:
1、可以跨平台,配置简单,内存消耗少,10个nginx才占用150M内存。
2、使用的是epoll模型,这种模型是I/O多路复用技术(I/O多路复用是一种技术,它允许一个进程或线程监控多个网络连接,当其中某个或某几个连接有数据时,当前程序可以拿到网卡收到的数据进行下一步的处理;),异步非阻塞的模型(异步非阻塞模型可以提高程序的效率,在等待I/O操作完成的同时,可以继续执行其他代码。)
3、nginx支持高并发连接,处理2-3万并发连接数,官方监测能支持5万并发。
4、成本低,且开源,稳定性高,宕机概率非常小;
5、内置的健康检查功能,可以允许在服务器宕机的时候,做健康检查,再发送的请求就不会发给宕机的服务器,会重新提交到其他节点上。
nginx的缺点:
nginx有个不太友好的地方是,nginx不方便处理动态资源,可以进行动静分离,将动态请求交给后端程序去进行处理。
二、nginx与Apache的区别
nginx和Apache的区别:
1、nginx是轻量级,nginx比apache 占用更少的内存及资源;
2、静态处理,Nginx 静态处理性能比 Apache 高 ;
3、Nginx可以实现无缓存的反向代理加速,提高网站运行速度;
4、Nginx的性能和可伸缩性不依赖于硬件,Apache依赖于硬件;
5、Nginx支持热部署,启动速度迅速,可以在不间断服务的情况下,对软件版本或者配置进行升级;
6、nginx是异步进程,基于事件的web服务器,多个连接对应一个进程 ;apache是同步多进程,基于流程的web服务器,一个连接对应一个进程;
7、Nginx高度模块化,编写模块相对简单,且组件比Apache少
8、nginx抗并发,nginx处理请求是异步非阻塞的,而Apache则是阻塞性的,在高并发下的nginx能够保持低资源,低消耗高性能。
三、nginx的应用场景
1、可以做web服务器,nginx是一个http服务,可以独立地提供http服务,可以做静态服务器;
2、虚拟主机。可以实现一台服务器,虚拟多个站点,例如基于ip、不同端口、或者不同域名的站点
3、反向代理服务器,负载均衡。当网站的访问量达到一定的程度时,单台服务器就不能满足用户的请求,此时需要多台服务器集群,此时可以使用nginx做反向代理,并且多台服务器可以平均分担负载,不会让某台服务器负载高或者闲置。(也可以使用ip hash技术 进行负载均衡分配)
4、nginx中还可以配置安全管理,比如支持nginx搭建API接口网关,对每一个接口服务进行拦截;
5、nginx还能做缓存服务器;
四、nginx为什么能支持高并发
最核心的原因:nginx是异步,非阻塞,使用 epoll ,和并且可以进行简单的配置细节优化。
假设一个server采用一个进程(或者线程)负责一个请求的方式,那么进程的数量就是并发的数量,那么会有很多进程在等待中,等待网络的传输,非常耗时耗资源。
但是nginx是使用了异步非阻塞的程序运行方式,解决了等待浪费时间的痛点,有一个专门进行调度进程,每次有一个request请求,就可以分配给worker进程去进行处理,web server 的工作性质决定了每个 request 的大部份生命都是在网络传输中,实际上花费在 server 机器上的时间片不多。这是几个进程就解决高并发的秘密所在。
五、为什么nginx不使用多线程
nginx采用单线程来异步非阻塞处理请求 (管理员可以配置 Nginx 主进程的工作进程的数量)(epoll),不会为每个请求分配 cpu 和内存资源,节省了大量资源,同时也减少了大量的 CPU 的上下文切换。所以才使得 Nginx 支持更高的并发。
六、nginx的两种进程分别有什么作用
nginx有两种进程,master进程和worker进程
master进程:用于管理worker进程,读取nginx的配置文件信息
worker进程:处理连接请求
七、编译安装nginx,并实现版本平滑升级
编译安装nginx的步骤
1.关闭防火墙,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2.安装依赖包
#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3.创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
cd /opt
tar zxvf nginx-1.12.0.tar.gz -C /opt/
cd nginx-1.12.0/
./configure \
--prefix=/usr/local/nginx \ #指定nginx的安装路径
--user=nginx \ #指定用户名
--group=nginx \ #指定组名
--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
make -j2 && make install
make -j2 ##表示cpu有2核,使用2个cpu同时一起编译,make是将源代码翻译成二进制
make install ##表示将二进制文件放到指定的目录中
安装完成
5.想要使用nginx命令直接启动服务,两种方式
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ #让系统识别nginx的操作命令
##做软连接,创建二进制文件到PATH路径中
##一般是安装在/usr/local中,就放到/usr/local下的/sbin下
还有一种当时是在PATH环境变量中加入nginx程序的目录,这种不常用
6.详解nginx的命令
nginx -t
nginx -v
nginx -V
nginx -s 信号
##cat /usr/local/nginx/logs/nginx.pid 先查看nginx的pid
##停止nginx服务的三种方式
kill -3 <nginx的pid号>
kill -s QUIT <nginx的pid号>
killall -3 nginx
killall -s QUIT nginx
nginx -s quit
kill -1 <nginx的pid>
kill -s HUP <nginx的pid>
killall -1 nginx
killall -s HUP nginx
nginx -s reload
7.nginx版本编译安装平滑升级的方式
新版本升级:
tar xf nginx-1.25.3.tar.gz
cd nginx-1.25.3/
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \ ##加上状态收集模块
--with-http_ssl_module ##最新的版本需要加上ssl模块
make
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx_old ##将原来的程序进行备份
cp objs/nginx /usr/local/nginx/sbin/nginx ##将新编译好的二进制文件放到安装目录下
make upgrade #要保证当前 nginx 进程是通过 /usr/local/nginx/sbin/nginx 启动的,而不是通过查找环境变量中那个 nginx 命令启动的
#或者先 killall nginx ,再/usr/local/nginx/sbin/nginx
8.使用systemd管理的两种办法
方法一:添加nginx系统服务,可以通用centos5-7三个版本
先创建一个nginx脚本文件
vim /etc/init.d/nginx
#!/bin/bash
#chkconfig: - 99 20 ##这一步必须要有,其中 - 表示为任何级别都不开启,99为第99个程序启动,20为第20个程序关闭
#description:Nginx Service Control Script ##脚本目的描述
COM="/usr/local/nginx/sbin/nginx" ##nginx启动的绝对路径
PID="/usr/local/nginx/logs/nginx.pid" ##nginx的pid号的文件
case "$1" in
start)
$COM
;;
stop)
kill -s QUIT $(cat $PID)
;;
restart)
$0 stop
$0 start
;;
reload)
kill -s HUP $(cat $PID)
;;
*)
echo "Usage: $0 {start|stop|restart|reload}"
exit 1
esac
exit 0
chmod +x /etc/init.d/nginx ##给脚本加上执行权限
chkconfig --add nginx ##添加为系统服务
chkconfig --list nginx ##查看运行级别中是否开机自启动
chkconfig --level 35 nginx on|off ##设置字符多用户和图形化界面可以开机自启动|关闭
service nginx start ##启动
service nginx stop ##关闭
命令与/etc/init.d/nginx脚本中相呼应
方法二:使用systemd 进行管理
vim /lib/systemd/system/nginx.service
[Unit] ##服务说明
Description=nginx ##描述服务
After=network.target ##依赖,当依赖的服务启动的时候再启动自定义的服务
[Service] ##服务运行参数的设置
Type=forking ##表示后台运行,使用启动类型应该同事指定PIDFile=,这样便于systemd能够追踪
PIDFile=/usr/local/nginx/logs/nginx.pid ##指定pid的文件
ExecStart=/usr/local/nginx/sbin/nginx ##服务启动的命令,就是绝对路径启动的命令
ExecReload=/bin/kill -s HUP $MAINPID ##加载
ExecStop=/bin/kill -s QUIT $MAINPID ##关闭
PrivateTmp=true ##表示给服务分配独立的临时空间
[Install]
WantedBy=multi-user.target ##服务安装的相关设置,可设置多用户
chmod 754 /lib/systemd/system/nginx.service
systemctl start nginx.service
systemctl enable nginx.service
需要注意的是:service启动和systemctl启动不能相互混用,使用其一即可
总结:nginx是一款可以轻量级(体现在内存消耗少),高性能(体现在抗高并发 ),能够实现反向代理(多台nginx服务的时候,做客户端和服务端的请求转发),并且可以做静态处理的web服务器。最牛的核心优势:支持异步非阻塞处理请求,使用的是epoll(I/O多路复用技术)!!!