目录
1.方法一:使用nginx信号完成nginx的升级(不推荐)
2.方法二:使用nginx安装目录的make命令完成升级(推荐)
我们前面已经写过一篇nginx的文章,基本就是简单的安装,如果大家只是想安装nginx,可以跳传送门:
https://blog.csdn.net/qq_40594696/article/details/117921352
本章会重新开始系统讲解一遍nginx。那么开始吧!
一、Nginx的相关概念
1.什么是Nginx
Nginx是一个高性能的HTTP和反向代理服务器,特点是占用内存少,并发能力强。
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率,能经受高负载的考验,有报告显示能支持高达5万个并发连接。
2.反向代理
想了解反向代理,先看看什么是正向代理。
(1)正向代理
如果把局域网外的Internet想象成一个巨大的资源库,则局域网中的客户端要访问Internet,则需要在客户端(浏览器)中配置代理服务器,然后通过代理服务器来访问,这种代理服务器称为正向代理。
简单来说,正向代理可让我们上网冲浪。
(2)反向代理
客户端对反向代理是无感的,因为客户端不需要任何配置就能访问。我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器的IP地址。
3.负载均衡
当请求量大了,单个服务器解决不了,我们增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器也就是我们说的负载均衡。
4.动静分离
为了加快网站的解析速度,可以把动态页面和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力。
二、nginx的简单安装
1.nginx的安装方式
(1)通过源码:简单安装,复杂安装
(2)通过yum安装
2.nginx安装的提前准备
(1)关闭防火墙
#查看防火墙状态
systemctl status firewalld
#关闭防火墙(临时关闭)
systemctl stop firewalld
#关闭防火墙(永久关闭)
systemctl disable firewalld
(2)确认停用selinux
selinux是linux的安全子系统之一,虽然让系统更安全,但是对我们学习nginx是个麻烦,所以停用。
#查看selinux状态
sestatus
#编辑配置文件,修改状态
vim /etc/selinux/config
###################################
SELINUX=disabled
###################################
#改完之后重启系统,不然状态不会生效
reboot
(3)GCC编辑器
3,4,5,6是分开安装,也可以直接看7,一次性安装到位。
nginx是C语言写的,想运行需要gcc编辑器
#安装gcc
yum install -y gcc
#查看是否安装成功
gcc --version
(4)PCRE
nginx在编译过程中需要用到PCRE库,因为在nginx的rewrite模块和http核心模块都会使用PCRE正则表达式语法。
#安装PCRE
yum install -y pcre pcre-devel
#查看是否安装成功
rpm -qa pcre pcre-devel
(5)zlib
zlib库提供了开发人员的压缩算法,在nginx的各个模块中都需要使用gzip压缩,所以我们需要提前安装其库及源码zlib和zlib-devel
#安装
yum install -y zlib zlib-devel
#查看
rpm -qa zlib zlib-devel
(6)OpenSSL
OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,避免被窃听。
SSL可以在Internet上提供秘密性传输,其目的是保证两个应用间通信的保密性和可靠性,如果服务器需要提供安全网页时需要用到OpenSSL库。
#安装
yum install -y openssl openssl-devel
#查看
rpm -qa openssl openssl-devel
(7)一次性安装
这里吧3456这几步综合了一下:
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
3.通过nginx源代码简单安装
(1)查看nginx官网下载
我们使用的版本是1.16.1:
http://nginx.org/en/download.html
(2)下载安装
我们有两种方式
*1)点击下载,然后xftp传输,然后解压
*2)在线下载(我们使用这一种)
右击nginx,选择复制地址,然后wget+地址
#创建目录
cd /usr/local/
mkdir -p nginx/core
cd nginx/core/
#下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
#解压
tar -xzf nginx-1.16.1.tar.gz
#进入资源中,发现configure
cd nginx-1.16.1/
./configure
#编译,安装
make && make install
#启动nginx
cd /usr/local/nginx/sbin/
./nginx
#测试:浏览器输入自己ip即可
三、nginx的yum方式安装
官网上有详细说明:http://nginx.org/en/linux_packages.html#RHEL-CentOS
如果你不想看官网,按照我的来走也是一样:
#安装yum-utils
sudo yum install yum-utils
#编辑配置文件
vim /etc/yum.repos.d/nginx.repo
#####################################################################
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#####################################################################
#安装nginx
sudo yum install -y nginx
#查找nginx
whereis nginx
#启动nginx
cd /usr/sbin/
./nginx
我们可以看到启动成功:
四、nginx的源码复杂安装
1.查看nginx的相关信息
我们通过查看简单安装和yum安装可以看到,输出的nginx信息不一样,yum比简单安装多出来很多东西。
cd /usr/sbin/
./nginx -V
复杂安装和简单安装最大的区别就是在./configure那一步,我们可以自定义做一些设置:
#打开简单安装的那个虚拟机
#查看有哪些可配置项
cd /usr/local/nginx/core/nginx-1.16.1/
./configure --help
2.配置说明
PATH:和路径相关的配置信息
with:是启动模块,默认是关闭的
without:是关闭模块,默认是开启的
我们列举一些常用配置:
#指向nginx的安装目录,默认为/usr/local/nginx
--prefix=PATH
#指向(执行)程序文件(nginx)的路径,默认值为<prefix>/sbin/nginx
--sbin-path=PATH
#指向nginx动态模块安装目录,默认值为<prefix>/modules
--modules-path=PATH
#指向配置文件(nginx.conf)的路径,默认值为<prefix>/conf/nginx.conf
--conf-path=PATH
#指向错误日志文件的路径,默认值为<prefix>/logs/error.log
--error-log-path=PATH
#指向访问日志文件的路径,默认值为<prefix>/logs/access.log
--http-log-path=PATH
#指向nginx启动后进行ID的文件路径,默认值为<prefix>/logs/nginx.pid
--pid-path=PATH
#指向nginx锁文件的存放路径,默认值为<prefix>/logs/nginx.lock
--lock-path=PATH
3.nginx源码复杂安装
我们在简单安装那台虚拟机进行复杂安装:
(1)关闭nginx进程
#关闭进程
cd /usr/local/nginx/sbin/
./nginx -s stop
#将nginx删除
rm -rf /usr/local/nginx/
(2)源码复杂安装
基本同简单安装,就是在配置那一步多了一些自定义配置
#创建目录
cd /usr/local/
mkdir -p nginx/core
cd nginx/core/
#下载
wget http://nginx.org/download/nginx-1.16.1.tar.gz
#解压
tar -xzf nginx-1.16.1.tar.gz
#进入资源中,发现configure
cd nginx-1.16.1/
#设置配置文件
./configure --prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--modules-path=/usr/local/nginx/modules \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--error-log-path=/usr/local/nginx/logs/error.log \
--http-log-path=/usr/local/nginx/logs/access.log \
--pid-path=/usr/local/nginx/logs/nginx.pid \
--lock-path=/usr/local/nginx/logs/nginx.lock
#编译,安装
make && make install
#启动nginx
cd /usr/local/nginx/sbin/
./nginx
#测试:浏览器输入自己ip即可
五、nginx目录结构分析
1.安装tree工具
#安装tree工具
yum install -y tree
#执行
tree /usr/local/nginx
2.目录分析
六、nginx服务器启停命令
1.方式一:nginx服务的信号控制
(1)nginx中的master和worker进程
查看master和worker进程:
#方法一
ps -ef | grep nginx
#方法二
more ../logs/nginx.pid
(2)信号
信号 | 作用 |
TERM/INT | 立刻关闭整个服务 |
QUIT | ”优雅”关闭整个服务,即不再接受新请求,完成当前请求后关闭 |
HUP | 重读配置文件并使用服务对新配置项生效。 关闭worker进程,读取最新配置文件,新建一个worker |
USR1 | 重新打开日志文件,可以用来进行日志切割。 kill -USR1 `more /usr/local/nginx/logs/nginx.pid` |
USR2 | 平滑升级到最新版的nginx。 一旦执行,会把原来的master和worker复制一份,并将新的PID写入到nginx.pid,旧的PID写入到nginx.pid.oldbin。一旦升级完成,会对旧的PID执行QUIT |
WINCH | 所有子进程不再接受处理新连接,相当于给worker进程发送QUIT指令 |
如何使用这些信号:
#其中PID为master的线程ID
kill -信号 PID
2.方式二:nginx的命令行控制
#查看有哪些命令
cd /usr/local/nginx/sbin/
./nginx -h
#命令解析
-h,-?:帮助命令
-v:列出nginx的版本信息
-V:列出nginx的版本信息,和其他nginx相关内容
-t:检测nginx.conf有没有语法错误
-T:检测nginx.conf有没有语法错误,更加详细
-q:在测试期间只输出错误信息,如果正确就不输出
-s(signal):后面可以跟如下
stop:快速关闭,类似于TERM/INT
quit:优雅关闭,类似于QUIT
reopen:重新打开日志文件,类似于USR1
reload:类似于HUP
-p(prefix):指定nginx的prefix路径,默认/usr/local/nginx/
-c(filename):指定nginx的配置文件路径,默认conf/nginx.conf
-g:用来补充nginx配置文件,向nginx服务指定启动时应用全局的配置
七、nginx服务器版本升级和新增模块
1.方法一:使用nginx信号完成nginx的升级(不推荐)
新开一个虚拟机,准备好需要的环境:
#准备环境
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
#准备两个版本nginx
cd /usr/local/
mkdir -p nginx/core
cd nginx/core/
wget http://nginx.org/download/nginx-1.16.1.tar.gz
wget http://nginx.org/download/nginx-1.14.2.tar.gz
#解压
tar -xzf nginx-1.16.1.tar.gz
tar -xzf nginx-1.14.2.tar.gz
#进入低版本,运行
cd nginx-1.14.2/
./configure
make && make install
cd /usr/local/nginx/sbin/
./nginx
./nginx -v
#进入高版本,编译,不安装
cd /usr/local/nginx/core/nginx-1.16.1/
./configure
make
cd objs/
./nginx -v
#进入低版本,将nginx文件名修改成nginxold
cd /usr/local/nginx/sbin/
mv nginx nginxold
#来到高版本,将nginx拷贝到低版本/sbin下面
cd /usr/local/nginx/core/nginx-1.16.1/objs/
cp nginx /usr/local/nginx/sbin/
#进行版本更替
cd /usr/local/nginx/sbin/
kill -USR2 `more /usr/local/nginx/logs/nginx.pid`
#查看nginx状态,这个时候会发现两个master
ps -ef | grep nginx
#查询出旧版本pid
more /usr/local/nginx/logs/nginx.pid.oldbin
#关闭旧版本
kill -QUIT `more /usr/local/nginx/logs/nginx.pid.oldbin`
#再次查看nginx版本状态
cd /usr/local/nginx/sbin
./nginx -v
2.方法二:使用nginx安装目录的make命令完成升级(推荐)
这两种方法本质都是一样的,但是第二种把第一种后面的两步相当于封装了,所以建议使用第二种。
截止到拷贝nginx都是一样的:
#准备环境
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
#准备两个版本nginx
cd /usr/local/
mkdir -p nginx/core
cd nginx/core/
wget http://nginx.org/download/nginx-1.16.1.tar.gz
wget http://nginx.org/download/nginx-1.14.2.tar.gz
#解压
tar -xzf nginx-1.16.1.tar.gz
tar -xzf nginx-1.14.2.tar.gz
#进入低版本,运行
cd nginx-1.14.2/
./configure
make && make install
cd /usr/local/nginx/sbin/
./nginx
./nginx -v
#进入高版本,编译,不安装
cd /usr/local/nginx/core/nginx-1.16.1/
./configure
make
cd objs/
./nginx -v
#进入低版本,将nginx文件名修改成nginxold
cd /usr/local/nginx/sbin/
mv nginx nginxold
#来到高版本,将nginx拷贝到低版本/sbin下面
cd /usr/local/nginx/core/nginx-1.16.1/objs/
cp nginx /usr/local/nginx/sbin/
#进入高版本,执行升级操作
make upgrade
#查看版本
cd /usr/local/nginx/sbin/
./nginx -v
八、打赏请求
如果本篇博客对您有所帮助,打赏一点呗,谢谢了呢~