一、Nginx 概述
1、什么是 Nginx
一款高性能、轻量级Web服务软件
- 稳定性高
- 系统资源消耗低
- 对HTTP并发连接的处理能力高
- 单台物理服务器可支持30 000~50 000个并发请求
2.Nginx与Apache区别
最核心的区别在于
- Nginx 采用异步非阻塞机制,多个连接可以对应一个进程;
- Apache 采用的是同步阻塞+多进程/线程模型,一个连接对应一个进程
- Nginx 抗并发能力更高
- Nginx 更轻量,内存、CPU资源消耗更少
- Nginx 配置简洁,使用场景多,稳定性高
2.1.Nginx的异步非阻塞机制
同步与异步
这两个概念是从客户端与服务端通信交互方式来看
**同步:**指服务端接收到客户端请求后,必须处理完该请求后(发送处理结果给客户端)才会接收客户
端发送来的下一个请求
**异步:**指服务端还没有处理完客户端请求(没有发送处理结果给客户端),就已经接收下一个客户端
发来的请求了
阻塞和非阻塞
这两个概念是从服务器内部处理请求的方式来看
**阻塞:**指服务器接收到请求后,如果遇到IO阻塞,当前线程会被挂起,直到IO完成后唤醒当前线
程,当前线程期间不会去处理其他事情
**非阻塞:**指服务器接收到请求后,如果遇到IO阻塞,当前线程不会挂起,而是会立即返回去执行下
一个调用
同步与异步,重点在于消息通知的方式
阻塞与非阻塞,重点在于等消息时候的行为
3.Nginx应用场景
- 用作Web网站服务,处理http静态页面请求
- 用作虚拟主机,实现一个服务器用于做多个网站站点
- 用作反向代理、负载均衡,可以作为网关代理服务器接收客户端的请求转发给后端节点服务器集群
- 用作web缓存服务器
4.Nginx两种进程
master进程:管理worker进程,加载配置文件
worker进程:处理请求连接
nginx的缺点:
nginx不方便处理动态资源,可以进行动静分离,将动态请求交给后端程序去进行处理。
二.编译安装Nginx服务
1.关闭防火墙 ,将安装nginx所需软件包传到/opt目录下
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
官网下载软件包
添加包
解压包
[root@localhost opt]# tar xf nginx-1.26.1.tar.gz
2.安装依赖包
yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make
3.创建运行用户、组
(Nginx 服务程序默认以 nobody 身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限)
useradd -M -s /sbin/nologin nginx
4.编译安装Nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module
##--prefix=/usr/local/nginx #指定nginx的安装路径
##--user=nginx \ #指定用户名
##--group=nginx \ #指定组名
##--with-http_stub_status_module #启用 http_stub_status_module 模块以支持状态统计
##--with-http_ssl_module ##需要https协议时启动http_ssl_module模块
lscpu确认好虚拟机核心数,超核编译容易报错!
make -j 4 && make install
想要使用nginx命令直接启动服务 做软连接放sbin里 让系统识别nginx的操作命令
ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
监听80端口上的进程 如果开了apache服务会起冲突!
5.检查、启动、重启、停止 nginx服务
5.检查、启动、重启、停止 nginx服务
nginx -t #检查配置文件是否配置正确
#启动
/usr/local/nginx/sbin/nginx
#停止
cat /usr/local/nginx/logs/nginx.pid #先查看nginx的PID号
kill -3 <PID号>
kill -s QUIT <PID号>
killall -3 nginx
killall -s QUIT nginx
#重载
kill -1 <PID号>
kill -s HUP <PID号>
killall -1 nginx
killall -s HUP nginx
#日志分割,重新打开日志文件
kill -USR1 <PID号>
#平滑升级
kill -USR2 <PID号>
新版本升级
tar -zxvf nginx-1.xx.xx.tar.gz
cd nginx-1.xx.xx
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module
--with-http_ssl_module
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
6.添加 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 --level 35 nginx on|off ##设置字符多用户和图形化界面可以开机自启动|关闭
chkconfig --list nginx ##查看运行级别中是否开机自启动
service nginx start ##启动
service nginx stop ##关闭
方法二
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
补充
[Unit]:服务的说明
Description:描述服务
After:依赖,当依赖的服务启动之后再启动自定义的服务
[Service]服务运行参数的设置
Type=forking是后台运行的形式,使用此启动类型应同时指定PIDFile=,以便systemd能够跟踪服务的主进程。
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:启动、重启、停止命令全部要求使用绝对路径
[Install]服务安装的相关设置,可设置为多用户