百木园-与人分享,
就是让自己快乐。

Nginx-基础篇

Nginx-基础篇

一、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 offrm -rf /etc/init.d/nginx
  • yum清理:yum remove nginx

三、目录结构分析

1. 源码目录结构

  • 解压Nginx的源码文件后可以看到下面的结构:

    目录/文件 解释
    auto 存放的是编译相关的脚本
    CHANGES 版本变更记录
    CHANGES.ru 俄罗斯文的版本变更记录
    conf Nginx默认的配置文件
    configure Nginx软件的自动脚本程序,作用为:检测环境及根据环境检测结果生成C代码;生成编译代码需要的 Makefile文件
    contrib 存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明
    html 存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面
    LICENSE 许可证的相关描述文件
    man Nginx的man手册
    README Nginx的阅读指南
    src Nginx的源代码

2. Nginx的目录结构

  • Nginx的目录结构如下

    主要目录/文件 解释
    conf Nginx所有配置文件目录
    mine.types 记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
    nginx.conf Nginx的核心配置文件
    html 存放Nginx自带的两个html页面
    50x.html 访问失败后的失败页面
    index.html 访问成功后的默认首页
    logs 日志文件存放地,当Nginx启动后,这里会有acess.log、error.log和nginx.pid文件
    sbin 存放执行程序文件nginx
    nginx 用来控制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 立即关闭整个服务
    QUIT master进程会控制所有的worker进程不再接收新的请求,等所有请求处理完后,再把进程都关闭掉
    HUP master进程会控制旧的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启动情况下是否能正常访问

来源:https://www.cnblogs.com/dcyL/p/16463100.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » Nginx-基础篇

相关推荐

  • 暂无文章