论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Nginx-基础篇
Nginx-基础篇
乌市泽哥
金牌会员
|
2022-8-27 07:38:19
|
显示全部楼层
|
阅读模式
楼主
主题
902
|
帖子
902
|
积分
2706
一、Nginx的简介
1. Nginx是什么
Nginx(engine x)是一个具有高性能的【HTTP】和【反向代理】的【Web服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】。
HTTP:是超文本传输协议的缩写,是用于从Web服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或其他工具,客户端发起一个到服务端上指定端口的HTTP请求。
正向代理:替真正的client向server申请服务的是正向代理;正向代理是client的行为,目的是为了伪造出client身份,常用在代理ip的使用。
反向代理:替真正的server给client提供服务的是反向代理;反向代理是server方的行为,目标是伪造出server身份,反向代理常用于前台nginx转发后台主服务器的架构。
Web服务器:也叫做网页服务器,主要功能是为用户提供网上信息浏览服务。
POP3/SMTP/IMAP代理服务器:POP3(Post Offic Protocol 3)邮局协议的第三个版本;SMTP(Simple Mail Transfer Protocol)简单邮件传输协议;IMAP(Internet Mail Access Protocol)交互式邮件存取协议。Nginx也可以作为电子邮件代理服务器。
2. Nginx的优点
速度更快、并发更高
单次请求或者高并发请求的环境下,Nginx都会比其它Web服务器响应的速度更快。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。
配置简单、扩展性强
Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块。如果需要完全可以开发服务于自己业务特性的定制模块。
高可靠性
Nginx采用的是多进程模式运行,其中有一个master主进程和多个worker进程,worker进程的数量可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去“拉起”新的worker进程提供服务。
热部署
互联网项目需要以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。
开源
Nginx
是开源的项目,因此可以免费的将其应用在商业领域,而且还可以在项目中直接修改Nginx的源码来定制自己的特殊要求。
二、环境准备
1. 获取源码
通过
Nginx官网
获取相应的版本下载。
2. 准备服务器系统
确认centos的内核
准备一个内核为2.6及以上版本的操作系统,因为Linux2.6及以上内核才支持epoll,而Nginx需要解决高并发压力问题时需要用到epoll。
确认关闭防火墙
建议关闭防火墙,可以省掉后续诸多问题。
确认停用selinux
建议关闭selinux,可以省掉后续诸多问题。
如果不是disabled状态,可以通过修改配置文件vim /etc/selinux/config来进行设置,修改SELINUX=disabled,然后重启下系统即可生效。
3. Nginx安装
源码安装方式需要提前执行yum install -y gcc pcre pcre-devel zlib zlib-devdl openssl openssl-devel这条命令,yum安装不需要执行。
方案一:Nginx的源码简单安装
方案二:Nginx的源码复杂安装
这种安装方式和简单安装的区别在于通过./configure来对编译参数进行设置
./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
复制代码
命令解释--prefix=PATH指向Nginx的安装目录,默认值为/usr/local/nginx--sbin-path=PATH指向(执行)程序文件(nginx)的路径,默认值为prefix+/sbin/nginx--modules-path=PATH指向Nginx动态模块安装目录,默认值为prefix+/modules--conf-path=PATH指向配置文件(nginx.conf)的路径,默认值为prefix+/conf/nginx.conf--error-log-path=PATH指向错误日志文件的路径,默认值为prefix+/logs/error.log--http-log-path=PATH指向访问日志文件的路径,默认值为prefix+/logs/access.log--pid-path=PATH指向Nginx启动后进程ID的文件路径,默认值prefix+/logs/nginx.pid--lock-path=PATH指向Nginx锁文件的存放路径,默认值为prefix+/logs/nginx.lock
方案三:yum安装
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
复制代码
4. Nginx的卸载
将nginx进程关闭:./nginx -s stop
将安装的nginx进行删除:rm -rf /usr/local/nginx
如果设置了Nginx开机自启的话,需要执行下面命令:chkconfig nginx off和rm -rf /etc/init.d/nginx
yum清理:yum remove nginx
三、目录结构分析
1. 源码目录结构
解压Nginx的源码文件后可以看到下面的结构:
目录/文件解释auto存放的是编译相关的脚本CHANGES版本变更记录CHANGES.ru俄罗斯文的版本变更记录confNginx默认的配置文件configureNginx软件的自动脚本程序,作用为:检测环境及根据环境检测结果生成C代码;生成编译代码需要的 Makefile文件contrib存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明html存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面LICENSE许可证的相关描述文件manNginx的man手册READMENginx的阅读指南srcNginx的源代码
2. Nginx的目录结构
Nginx的目录结构如下
主要目录/文件解释confNginx所有配置文件目录mine.types记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系nginx.confNginx的核心配置文件html存放Nginx自带的两个html页面50x.html访问失败后的失败页面index.html访问成功后的默认首页logs日志文件存放地,当Nginx启动后,这里会有acess.log、error.log和nginx.pid文件sbin存放执行程序文件nginxnginx用来控制Nginx的启动和停止等相关的命令
四、Nginx服务器启停命令
在学习Nginx启停命令之前先简单了解一下Nginx是如何工作的。
Nginx的高性能和其架构模式有关,Nginx默认采用的是多进程的方式来工作的,当在配置文件中进行配置后Nginx即可以一个master进程和多个worker进程的方式来工作。
master进程主要用来管理worker进程,包含接收外界的信息并将接收到的信息发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。
worker进程是专门用来处理用户请求的,各个worker进程之间是平等的且相互独立,处理请求的机会也是一样的。
1. Nginx服务的信号控制
通过上面的Nginx的进程模型可以看出,我们作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件,一个是要操作的master进程,一个是信号。
要想操作Nginx的master进程,就需要获取到master进程的ID。可以通过以下两种方式来获取:
方式一:通过ps -ef|grep nginx命令获取;
方式二:在上述关于Nginx的./configure的配置参数时,有一个参数是--pid-path=PATH默认是/usr/local/nginx/logs/nginx.pid,可以通过查看该文件来获取Nginx的master进程ID。
调用命令为kill -single PID信号作用TERM/INT立即关闭整个服务QUITmaster进程会控制所有的worker进程不再接收新的请求,等所有请求处理完后,再把进程都关闭掉HUPmaster进程会控制旧的worker不再接收新的请求,等处理完请求后将旧的worker进程关闭掉,然后根据Nginx的配置文件重新启动新的worker进程USR1重新打开日志文件,可以用来进行日志切割USR2告诉master要平滑升级,这时会重新开启对应的master进程和worker进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在/usr/local/nginx/logs/nginx.pid,而之前旧的master进程PID会被记录在/usr/local/nginx/logs/nginx.pid.oldbin文件中,接着再次发送QUIT给旧的master进程,让其处理完请求后进行关闭WINCH所有worker不再接收处理新连接,相当于给worker进程发送QUIT指令,注意master进程不会被关闭
2. Nginx的命令行控制
此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,可以通过 ./nginx -h查看帮助。
五、Nginx配置
1. Nginx配置成系统服务
把Nginx应用服务配置设置成系统服务,方便对Nginx服务的启动和停止等相关操作,具体实现步骤为:
在/usr/lib/systemd/system目录下添加nginx.service,内容如下:
nginx.service
[Unit]
Description=nginx web service
Documentation=http://nginx.org/en/docs/
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=default.target
复制代码
添加完成后如果权限有问题需要进行权限设置chmod 755 /usr/lib/systemd/system/nginx.service
使用系统命令来操作Nginx服务
启动:systemctl start nginx
停止:systemctl stop nginx
重启:systemctl restart nginx
重新加载配置文件:systemctl reload nginx
查看nginx状态:systemctl status nginx
开机启动:systemctl enable nginx
2.nginx命令配置到系统环境
在之前执行Nginx的相关命令时都需要进入到sbin目录下去执行,很是麻烦,在此处可以通过将Nginx命令配置到系统环境中的方式来使得执行Nginx命令可以在任何目录下进行。
修改/etc/profile文件,在最后一行添加export PATH=$PATH:/usr/local/nginx/sbin
使之立即生效source /etc/profile
六、Nginx的版本升级和新增模块
如果想对Nginx的版本进行更新或者应用新的模块,最简单的做法就是停止当前Nginx服务,然后开启新的Nginx服务,但是这样会导致在一段时间内用户无法访问服务器。为了解决这个问题就需要借助Nginx提供的平滑升级功能,这里有两种方案可以完成不中断Nginx服务的情况下进行升级。
环境准备
(1)先准备两个版本的Nginx分别是1.14.2和1.16.1
(2)使用Nginx源码安装的方式将1.14.2版本安装成功并能正确访问到Nginx页面
(3)将Nginx1.16.1进行参数配置和编译,不需要进行安装(不需要执行make install)
方案一:使用Nginx服务信号进行升级
(1)将1.14.2版本的sbin目录下的nginx进行备份
(2)将Nginx1.16.1安装目录编译后的objs目录下的nginx文件,copy到原来/usr/local/nginx/sbin目录下
(3)发送信号USR2给nginx的1.14.2版本对应的master进程
(4)发送信号QUIT给nginx的1.14.2版本对应的master进程
(5)查看是否更新成功并在Nginx启动情况下是否能正常访问
方案二:使用Nginx安装目录的make命令完成升级
(1)将1.14.2版本的sbin目录下的nginx进行备份
(2)将1.16.1安装目录编译后的objs目录下的nginx文件copy到原来/usr/local/nginx/sbin目录下
(3)进入安装目录,执行make upgrade
(4)查看是否更新成功并在Nginx启动情况下是否能正常访问
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
乌市泽哥
金牌会员
这个人很懒什么都没写!
楼主热帖
是什么让.NET7的Min和Max方法性能暴增 ...
@RequestParam,@PathVariable两个注解 ...
2019 第十届蓝桥杯大赛软件赛决赛,国 ...
7 行代码搞崩溃 B 站,原因令人唏嘘! ...
SqlServer远程连接
聚焦企业开放OpenAPI痛难点,华为云API ...
想入行SAP咨询,最具性价比的方式 ...
活动 | 塑造软件新生态 赋能发展新变革 ...
CentOS7 安装 Redis 7.0.2
[WPF] 使用 HandyControl 的 CirclePan ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表