Nginx基础篇【一】

Nginx基础篇【一】

  • 一、Nginx基础篇【一】
    • 1.1.背景介绍
    • 1.2.名词解释
      • 1.2.1. WEB服务器:
      • 1.2.2. HTTP:
      • 1.2.3. POP3/SMTP/IMAP:
      • 1.2.4. 反向代理
      • 1.2.5.常见服务器对比
        • 1.2.5.1.IIS
        • 1.2.5.2.Tomcat
        • 1.2.5.3.Apache
        • 1.2.5.4.Lighttpd
        • 1.2.5.5.其他的服务器
    • 1.3.Nginx的优点
      • (1)速度更快、并发更高
      • (2)配置简单,扩展性强
      • (3)高可靠性
      • (4)热部署
      • (5)成本低、BSD许可证
    • 1.4.Nginx的功能特性及常用功能
      • 1.4.1.基本HTTP服务
      • 1.4.2.高级HTTP服务
      • 1.4.3.邮件服务
    • 1.5.Nginx常用的功能模块
    • 1.6.Nginx的核心组成
    • 1.7.Nginx环境准备
      • 1.7.1.Nginx版本介绍
      • 1.7.2.获取Nginx源码
      • 1.7.3.准备服务器系统
        • 1.7.3.1.环境准备
        • 1.7.3.2.确认centos的内核
        • 1.7.3.3.确保centos能联网
        • 1.7.3.4.确认关闭防火墙
        • 1.7.3.5.确认停用selinux
    • 1.8.Nginx安装方式介绍
      • 1.8.1.Nginx源码安装需要提前准备
        • 1.8.1.1.GCC编译器
        • 1.8.1.2.PCRE
        • 1.8.1.3.zlib
        • 1.8.1.4.OpenSSL
        • 1.8.1.5.警告时缺少安装包
      • 1.8.2.方案一:Nginx的源码简单安装
        • 1.8.2.1.进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载
        • 1.8.2.2.将下载的资源进行包管理
        • 1.8.2.3.解压缩
        • 1.8.2.4.进入资源文件中,发现configure
        • 1.8.2.5.编译
        • 1.8.2.6.安装
        • 1.8.2.7.启动Nginx
        • 1.8.2.8.看下目录结构
        • 1.8.2.9.卸载nginx
      • 1.8.3.方案二:yum安装
        • 1.8.3.1.官方安装步骤
        • 1.8.3.2.安装yum-utils
        • 1.8.3.3.添加yum源文件
        • 1.8.3.4.查看是否安装成功
        • 1.8.3.5.使用yum进行安装
        • 1.8.3.6.查看nginx的安装位置
        • 1.8.3.7.启动测试
      • 1.8.4.源码简单安装和yum安装的差异:
      • 1.8.5.解压Nginx目录
      • 1.8.6.方案三:Nginx的源码指定编译参数复杂安装
        • 1.8.6.1.Nginx编译参数
        • 1.8.6.2.卸载Nginx
        • 1.8.6.3.指定编译参数,重新编译Nginx
      • 18.7.make报错修改ngx_http_lua_headers_in.c文件
    • 1.9.Nginx目录结构分析
      • 1.9.1.Nginx目录结构
      • 1.9.2.基本运行原理
      • 1.9.3.conf:nginx所有配置文件目录
    • 1.10.Nginx服务器启动、重启和停止Nginx的服务
      • 1.10.1.方式一:Nginx服务的信号控制
        • 1.10.1.1.要想操作Nginx的master进程,就需要获取到master进程的进程号ID。
        • 1.10.1.2.信号
      • 1.10.2.方式二:Nginx的命令行控制参数使用
    • 1.11.Nginx服务器版本升级和新增模块
      • 1.11.1.环境准备
        • 1.11.1.1.先准备两个版本的Nginx分别是 1.22.1和1.24.0
        • 1.11.1.2.使用Nginx源码安装的方式将1.22.1版本安装成功并正确访问
        • 1.11.1.3.将Nginx1.24.0进行参数配置和编译,不需要进行安装。
      • 1.11.2.方案一:使用Nginx服务信号进行升级
        • 1.11.2.1.将1.22.1版本的sbin目录下的nginx进行备份
        • 1.11.2.2.将Nginx1.24.0安装目录编译后的objs目录下的nginx文件,拷贝到原来`/usr/local/nginx/sbin`目录下
        • 1.11.2.3.发送信号USR2给Nginx的1.22.1版本对应的master进程
        • 1.11.2.4.发送信号QUIT给Nginx的1.22.1版本对应的master进程
      • 1.11.3.方案二:使用Nginx安装目录的make命令完成升级
        • 1.11.3.1.将1.22.1版本的sbin目录下的nginx进行备份
        • 1.11.3.2.将Nginx1.24.0安装目录编译后的objs目录下的nginx文件,拷贝到原来`/usr/local/nginx/sbin`目录下
        • 1.11.3.3.进入到安装目录,执行`make upgrade`
        • 1.11.3.4.查看是否更新成功
    • 1.12.安装成系统服务,通过systemctl方法来启动nginx
      • 1.12.1.创建脚本
      • 1.12.2.服务脚本内容
      • 1.12.3.进行权限设置
      • 1.12.4.开机启动
    • 1.13.Nginx核心配置文件结构
      • 1.13.1.Nginx基础配置文件nginx.conf 内容解读和基本配置方法
      • 1.13.2.未开启sendfile
      • 1.13.3.开启sendfile on;
      • 1.13.4.全局块
        • 1.13.4.1.user指令
          • 1.13.4.1.1.user:用于配置运行Nginx服务器的worker进程的用户和用户组。
          • 1.13.4.1.2.设置一个用户信息"www"
          • 1.13.4.1.3.创建一个用户
          • 1.13.4.1.4.修改user属性
          • 1.13.4.1.5.创建`/root/html/index.html`页面,添加如下内容
          • 1.13.4.1.6.修改nginx.conf
          • 1.13.4.1.7.测试启动访问--403
          • 1.13.4.1.8.分析原因:因为当前用户没有访问/root/html目录的权限
          • 1.13.4.1.9.将文件创建到 `/home/www/html/index.html`,修改配置
          • 1.13.4.1.10.再次测试启动访问
        • 1.13.4.2.work process指令
        • 1.13.4.3.其他指令
        • 1.13.4.4.include:用来引入其他配置文件,使Nginx的配置更加灵活
      • 1.13.5.events块
        • 1.13.5.1.accept_mutex:用来设置Nginx网络连接序列化
        • 1.13.5.2.multi_accept:用来设置是否允许同时接收多个网络连接
        • 1.13.5.3.worker_connections:用来配置单个worker进程最大的连接数
        • 1.13.5.4.use:用来设置Nginx服务器选择哪种事件驱动来处理网络消息。
        • 1.13.5.5.events指令配置实例
      • 1.13.6.http块
        • 1.13.6.1.定义MIME-Type
        • 1.13.6.2.default_type:用来配置Nginx响应前端请求默认的MIME类型。
        • 1.13.6.3.自定义服务日志
        • 1.13.6.4.其他配置指令
      • 1.13.7.server块和location块
    • 1.14.nginx.conf 和 常用文件
  • endl

一、Nginx基础篇【一】

1.1.背景介绍

Nginx一个具有高性能的【HTTP】和【反向代理】的【WEB服务器】,同时也是一个【POP3/SMTP/IMAP代理服务器】,是由伊戈尔·赛索耶夫(俄罗斯人)使用C语言编写的,Nginx的第一个版本是2004年10月4号发布的0.1.0版本。

1.2.名词解释

1.2.1. WEB服务器:

WEB服务器也叫网页服务器,英文名叫Web Server,主要功能是为用户提供网上信息浏览服务。

1.2.2. HTTP:

HTTP是超文本传输协议的缩写,是用于从WEB服务器传输超文本到本地浏览器的传输协议,也是互联网上应用最为广泛的一种网络协议。HTTP是一个客户端和服务器端请求和应答的标准,客户端是终端用户,服务端是网站,通过使用Web浏览器、网络爬虫或者其他工具,客户端发起一个到服务器上指定端口的HTTP请求。

1.2.3. POP3/SMTP/IMAP:

POP3(Post Offic Protocol 3)邮局协议的第三个版本,

SMTP(Simple Mail Transfer Protocol)简单邮件传输协议,

IMAP(Internet Mail Access Protocol)交互式邮件存取协议,

通过上述名词的解释,我们可以了解到Nginx也可以作为电子邮件代理服务器。

1.2.4. 反向代理

正向代理

在这里插入图片描述

反向代理
在这里插入图片描述

1.2.5.常见服务器对比

Netcraft公司于1994年底在英国成立,多年来一直致力于互联网市场以及在线安全方面的咨询服务,
其中在国际上最具影响力的当属其针对网站服务器、SSL市场所做的客观严谨的分析研究,
公司官网每月公布的调研数据(Web Server Survey)已成为当今人们了解全球网站数量
以及服务器市场分额情况的主要参考依据,时常被诸如华尔街杂志,英国BBC,Slashdot等媒体报道或引用。

Nginx的官方网站:http://nginx.org/
在这里插入图片描述

1.2.5.1.IIS

​ 全称(Internet Information Services)即互联网信息服务,是由微软公司提供的基于windows系统的互联网基本服务。windows作为服务器在稳定性与其他一些性能上都不如类UNIX操作系统,因此在需要高性能Web服务器的场合下,IIS可能就会被"冷落".

1.2.5.2.Tomcat

​ Tomcat是一个运行Servlet和JSP的Web应用软件,Tomcat技术先进、性能稳定而且开放源代码,因此深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。但是Tomcat天生是一个重量级的Web服务器,对静态文件和高并发的处理比较弱。

1.2.5.3.Apache

​ Apache的发展时期很长,同时也有过一段辉煌的业绩。从上图可以看出大概在2014年以前都是市场份额第一的服务器。Apache有很多优点,如稳定、开源、跨平台等。但是它出现的时间太久了,在它兴起的年代,互联网的产业规模远远不如今天,所以它被设计成一个重量级的、不支持高并发的Web服务器。在Apache服务器上,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量能存,操作系统内核对成百上千的Apache进程做进程间切换也会消耗大量的CUP资源,并导致HTTP请求的平均响应速度降低,这些都决定了Apache不可能成为高性能的Web服务器。这也促使了Lighttpd和Nginx的出现。

1.2.5.4.Lighttpd

​ Lighttpd是德国的一个开源的Web服务器软件,它和Nginx一样,都是轻量级、高性能的Web服务器,欧美的业界开发者比较钟爱Lighttpd,而国内的公司更多的青睐Nginx,同时网上Nginx的资源要更丰富些。

1.2.5.5.其他的服务器

Google Servers,Weblogic, Webshpere(IBM)…

1.3.Nginx的优点

(1)速度更快、并发更高

单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快。一方面在正常情况下,单次请求会得到更快的响应,另一方面,在高峰期(如有数以万计的并发请求),Nginx比其他Web服务器更快的响应请求。Nginx之所以有这么高的并发处理能力和这么好的性能原因在于Nginx采用了多进程和I/O多路复用(epoll)的底层实现。

(2)配置简单,扩展性强

Nginx的设计极具扩展性,它本身就是由很多模块组成,这些模块的使用可以通过配置文件的配置来添加。这些模块有官方提供的也有第三方提供的模块,如果需要完全可以开发服务自己业务特性的定制模块。

(3)高可靠性

Nginx采用的是多进程模式运行,其中有一个master主进程N多个worker进程,worker进程的数量我们可以手动设置,每个worker进程之间都是相互独立提供服务,并且master主进程可以在某一个worker进程出错时,快速去"拉起"新的worker进程提供服务。

(4)热部署

现在互联网项目都要求以7*24小时进行服务的提供,针对于这一要求,Nginx也提供了热部署功能,即可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能。

(5)成本低、BSD许可证

BSD是一个开源的许可证,世界上的开源许可证有很多,现在比较流行的有六种分别是GPL、BSD、MIT、Mozilla、Apache、LGPL。

在这里插入图片描述

Nginx本身是开源的,我们不仅可以免费的将Nginx应用在商业领域,而且还可以在项目中直接修改Nginx的源码来定制自己的特殊要求。
OpenRestry [Nginx+Lua] Tengine[淘宝]

1.4.Nginx的功能特性及常用功能

Nginx提供的基本功能服务从大体上归纳为"基本HTTP服务"、“高级HTTP服务”和"邮件服务"等三大类。

1.4.1.基本HTTP服务

Nginx可以提供基本HTTP服务,可以作为HTTP代理服务器和反向代理服务器,支持通过缓存加速访问,可以完成简单的负载均衡和容错,支持包过滤功能,支持SSL等。

  • 处理静态文件、处理索引文件以及支持自动索引;
  • 提供反向代理服务器,并可以使用缓存加上反向代理,同时完成负载均衡和容错;
  • 提供对FastCGI、memcached等服务的缓存机制,,同时完成负载均衡和容错;
  • 使用Nginx的模块化特性提供过滤器功能。Nginx基本过滤器包括gzip压缩、ranges支持、chunked响应、XSLT、SSI以及图像缩放等。其中针对包含多个SSI的页面,经由FastCGI或反向代理,SSI过滤器可以并行处理。
  • 支持HTTP下的安全套接层安全协议SSL
  • 支持基于加权和依赖的优先权的HTTP/2

1.4.2.高级HTTP服务

  • 支持基于名字和IP的虚拟主机设置
  • 支持HTTP/1.0中的KEEP-Alive模式和管线(PipeLined)模型连接
  • 自定义访问日志格式、带缓存的日志写操作以及快速日志轮转。
  • 提供3xx~5xx错误代码重定向功能
  • 支持重写(Rewrite)模块扩展
  • 支持重新加载配置以及在线升级时无需中断正在处理的请求
  • 支持网络监控
  • 支持FLV和MP4流媒体传输

1.4.3.邮件服务

Nginx提供邮件代理服务也是其基本开发需求之一,主要包含以下特性:

  • 支持IMPA/POP3代理服务功能
  • 支持内部SMTP代理服务功能

1.5.Nginx常用的功能模块

静态资源部署
Rewrite地址重写
	正则表达式
反向代理
负载均衡
	轮询、加权轮询、ip_hash、url_hash、fair
Web缓存
环境部署
	高可用的环境
用户认证模块...

1.6.Nginx的核心组成

nginx二进制可执行文件
nginx.conf配置文件
error.log错误的日志记录
access.log访问日志记录

1.7.Nginx环境准备

1.7.1.Nginx版本介绍

Nginx的官方网站为: http://nginx.org
Nginx的官方下载网站为http://nginx.org/en/download.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.7.2.获取Nginx源码

http://nginx.org/download/

打开上述网站,就可以查看到Nginx的所有版本,选中自己需要的版本进行下载。

在这里插入图片描述

1.7.3.准备服务器系统

1.7.3.1.环境准备
VMware WorkStation
Centos7
MobaXterm
	xsheel,SecureCRT
网络

FinalShell SSH工具官网:http://www.hostbuf.com/
FinalShell SSH工具官网下载:http://www.hostbuf.com/t/988.html
Centos官网:https://www.centos.org/download/
MobaXterm官网:https://mobaxterm.mobatek.net/
MobaXterm官网下载:https://mobaxterm.mobatek.net/download.html

1.7.3.2.确认centos的内核

准备一个内核为2.6及以上版本的操作系统,因为linux2.6及以上内核才支持epoll,而Nginx需要解决高并发压力问题是需要用到epoll

# 查询linux的内核版本
uname -a

在这里插入图片描述

1.7.3.3.确保centos能联网
ping www.baidu.com

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.7.3.4.确认关闭防火墙

关闭的方式有如下两种:

# 关闭运行的防火墙,系统重新启动后,防火墙将重新打开
systemctl stop firewalld

# 永久关闭防火墙,,系统重新启动后,防火墙依然关闭 
systemctl disable firewalld

# 查看防火墙状态 
systemctl status firewalld

在这里插入图片描述

1.7.3.5.确认停用selinux

selinux(security-enhanced linux),美国安全局对于强制访问控制的实现,在linux2.6内核以后的版本中,selinux已经成功内核中的一部分。可以说selinux是linux史上最杰出的新安全子系统之一。虽然有了selinux,我们的系统会更安全,但是对于我们的学习Nginx的历程中,会多很多设置,所以这块建议大家将selinux进行关闭。

# 查看状态
sestatus

在这里插入图片描述

如果查看不是disabled状态,我们可以通过修改配置文件来进行设置,修改SELINUX=disabled,然后重启下系统即可生效。

vim /etc/selinux/config

# 重启系统
reboot

在这里插入图片描述

1.8.Nginx安装方式介绍

Nginx的安装方式有两种分别是:

通过Nginx源码
	通过Nginx源码简单安装 (1)
	通过Nginx源码复杂安装 (3)
通过yum安装 (2)

1.8.1.Nginx源码安装需要提前准备

1.8.1.1.GCC编译器

Nginx是使用C语言编写的程序,因此想要运行Nginx就需要安装一个编译工具。
GCC就是一个开源的编译器集合,用于处理各种各样的语言,其中就包含了C语言。

# 安装gcc
yum install -y gcc

# 查看gcc是否安装成功
gcc --version
1.8.1.2.PCRE

Nginx在编译过程中需要使用到PCRE库(perl Compatible Regular Expressoin 兼容正则表达式库),因为在Nginx的Rewrite模块和http核心模块都会使用到PCRE正则表达式语法。

# 安装 PCRE库
yum install -y pcre pcre-devel

rpm -qa pcre pcre-devel
1.8.1.3.zlib

zlib库提供了开发人员的压缩算法,在Nginx的各个模块中需要使用gzip压缩,所以我们也需要提前安装其库及源代码zlib和zlib-devel

yum install -y zlib zlib-devel

rpm -qa zlib zlib-devel
1.8.1.4.OpenSSL
  • OpenSSL是一个开放源代码的软件库包,应用程序可以使用这个包进行安全通信,并且避免被窃听。

  • SSL:Secure Sockets Layer安全套接协议的缩写,可以在Internet上提供秘密性传输,其目标是保证两个应用间通信的保密性和可靠性。-

  • 在Nginx中,如果服务器需要提供安全网页时就需要用到OpenSSL库,所以我们需要对OpenSSL的库文件及它的开发安装包进行一个安装。

yum install -y openssl openssl-devel

rpm -qa openssl openssl-devel

上述命令,一个个来的话比较麻烦,我们也可以通过一条命令来进行安装

# 一条命令来进行全部安装
yum install -y gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

gcc --version

rpm -qa pcre pcre-devel zlib zlib-devel openssl openssl-devel
1.8.1.5.警告时缺少安装包

安装gcc
yum -y install gcc

checking for OS 
+ Linux 3.10.0-693.el7.x86_64 x86_64 checking for C compiler ... not found 

./configure: error: C compiler cc is not found

安装perl库
yum install -y pcer-devl

./configure: error: the HTTP rewrite module requires the PCRE library.
You can either disable the module by using --without-http_rewrite_module option, or install the PCRE library into the system, or build the PCRE library statically from the source with nginx by using --with-pcre=<path> option. 

安装zlib库
yum install -y zlib zlib-devel

./configure: error: the HTTP gzip module requires the zlib library.
You can either disable the module by using --without-http_gzip_module 
option, or install the zlib library into the system, or build the zlib library statically from the source with nginx by using --with-zlib=<path> option. 

1.8.2.方案一:Nginx的源码简单安装

1.8.2.1.进入官网查找需要下载版本的链接地址,然后使用wget命令进行下载
yum -y install wget

wget http://nginx.org/download/nginx-1.24.0.tar.gz

在这里插入图片描述
在这里插入图片描述

1.8.2.2.将下载的资源进行包管理
mkdir -p /app/nginx/core

mv nginx-1.24.0.tar.gz /app/nginx/core
1.8.2.3.解压缩
cd /app/nginx/core
tar -zxvf nginx-1.24.0.tar.gz
1.8.2.4.进入资源文件中,发现configure
cd /app/nginx/core/nginx-1.24.0

./configure

# 或者指定路径
./configure --prefix=/usr/local/nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.8.2.5.编译
make
1.8.2.6.安装
make install
1.8.2.7.启动Nginx

进入安装好的目录 /usr/local/nginx/sbin

cd /usr/local/nginx/sbin

./nginx -V 查看版本详细信息
./nginx 启动
./nginx -s stop 快速停止
./nginx -s quit 优雅关闭,在退出前完成已经接受的连接请求
./nginx -s reload 重新加载配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.8.2.8.看下目录结构
# 指定的目录以树状结构展示出来
yum install tree

tree /usr/local/nginx/

在这里插入图片描述

1.8.2.9.卸载nginx
# 先看下nginx是否在运行中
ps  aux | grep nginx

# 如果在运行中,则停止
nginx -s stop 或者直接杀死进程  pkill  nginx或  kill -9  进程号


# 找到所有nginx有关文件
find  / -name nginx*

# 删除有关nginx的文件(linux中一切都文件)
rm -rf /usr/local/nginx*
find / -name nginx*

# 卸载nginx的有关依赖
yum  remove  nginx

在这里插入图片描述

1.8.3.方案二:yum安装

官网:http://nginx.org/en/docs/install.html
RHEL and derivatives:http://nginx.org/en/linux_packages.html#RHEL

使用源码进行简单安装,我们会发现安装的过程比较繁琐,需要提前准备GCC编译器、PCRE兼容正则表达式库、zlib压缩库、OpenSSL安全通信的软件库包,然后才能进行Nginx的安装。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.8.3.1.官方安装步骤

RHEL and derivatives:http://nginx.org/en/linux_packages.html#RHEL

在这里插入图片描述
RHEL and derivatives
This section applies to Red Hat Enterprise Linux and its derivatives such as CentOS, Oracle Linux, Rocky Linux, AlmaLinux.

Install the prerequisites:

sudo yum install yum-utils

To set up the yum repository, create the file named /etc/yum.repos.d/nginx.repo with the following contents:

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

By default, the repository for stable nginx packages is used. If you would like to use mainline nginx packages, run the following command:

# 切换成主线版本,暂时不需要
sudo yum-config-manager --enable nginx-mainline

To install nginx, run the following command:

sudo yum install nginx

When prompted to accept the GPG key, verify that the fingerprint matches 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62, and if so, accept it.

1.8.3.2.安装yum-utils
sudo yum install -y yum-utils
1.8.3.3.添加yum源文件
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

在这里插入图片描述

1.8.3.4.查看是否安装成功
yum list | grep nginx

在这里插入图片描述

1.8.3.5.使用yum进行安装
yum -y install nginx

在这里插入图片描述

1.8.3.6.查看nginx的安装位置
whereis nginx

在这里插入图片描述

1.8.3.7.启动测试
cd /usr/sbin

./nginx

在这里插入图片描述
在这里插入图片描述

1.8.4.源码简单安装和yum安装的差异:

# 查看到所安装Nginx的版本及相关配置信息

./nginx -V

简单安装
在这里插入图片描述

yum安装
在这里插入图片描述

1.8.5.解压Nginx目录

执行tar -zxvf nginx-1.24.0.tar.gz对下载的资源进行解压缩,进入压缩后的目录,可以看到如下结构

tar -zxvf nginx-1.24.0.tar.gz

在这里插入图片描述

内容解释:

  • auto:存放的是编译相关的脚本

  • CHANGES:版本变更记录

  • CHANGES.ru:俄罗斯文的版本变更记录

  • conf:nginx默认的配置文件

  • configure:nginx软件的自动脚本程序,是一个比较重要的文件,作用如下:

    • (1)检测环境及根据环境检测结果生成C代码

    • (2)生成编译代码需要的Makefile文件

  • contrib:存放的是几个特殊的脚本文件,其中README中对脚本有着详细的说明

  • html:存放的是Nginx自带的两个html页面,访问Nginx的首页和错误页面

  • LICENSE:许可证的相关描述文件

  • man:nginx的man手册

  • README:Nginx的阅读指南

  • src:Nginx的源代码

1.8.6.方案三:Nginx的源码指定编译参数复杂安装

1.8.6.1.Nginx编译参数

这种方式和简单的安装配置不同的地方在第一步,通过./configure来对编译参数进行设置,需要我们手动来指定。那么都有哪些参数可以进行设置,接下来我们进行一个详细的说明。

  • PATH:是和路径相关的配置信息

  • with:是启动模块,默认是关闭的

  • without:是关闭模块,默认是开启的

–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
1.8.6.2.卸载Nginx

在使用上述命令之前,需要将之前服务器已经安装的nginx进行卸载,卸载的步骤分为三步骤:

步骤一:需要将nginx的进程关闭

./nginx -s stop

步骤二:将安装的nginx进行删除

cd ~

find / -name nginx*

rm -rf /usr/local/nginx

步骤三:将安装包之前编译的环境清除掉

cd /app/nginx/core/nginx-1.24.0

make clean
1.8.6.3.指定编译参数,重新编译Nginx

在这里插入图片描述

./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 \
--with-http_gzip_static_module
# 编译安装
make & make install

在这里插入图片描述
在这里插入图片描述

18.7.make报错修改ngx_http_lua_headers_in.c文件

‘ngx_http_headers_in_t’没有名为‘cookies’的成员
在这里插入图片描述

In file included from /usr/include/dlfcn.h:25:0,
                 from src/os/unix/ngx_linux_config.h:58,
                 from src/core/ngx_config.h:26,
                 from /nginx/module/lua-nginx-module/src/ddebug.h:11,
                 from /nginx/module/lua-nginx-module/src/ngx_http_lua_headers_in.c:10:
/nginx/module/lua-nginx-module/src/ngx_http_lua_headers_in.c:162:18: 错误:‘ngx_http_headers_in_t’没有名为‘cookies’的成员
                  offsetof(ngx_http_headers_in_t, cookies),
                  ^
make[1]: *** [objs/addon/src/ngx_http_lua_headers_in.o] 错误 1
make[1]: 离开目录“/nginx/core/nginx-1.24.0”
make: *** [build] 错误 2
vi /nginx/module/lua-nginx-module/src/ngx_http_lua_headers_in.c

在这里插入图片描述
在这里插入图片描述

1.9.Nginx目录结构分析

1.9.1.Nginx目录结构

# 安装tree工具展示目录结构
yum -y install tree

# 查看centos系统上的文件目录结构
tree /usr/local/nginx

# 显示所有文件和目录
tree /usr/local/nginx -a

在这里插入图片描述

1.9.2.基本运行原理

在这里插入图片描述

1.9.3.conf:nginx所有配置文件目录

CGI(Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。

[root@192 sbin]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf # 用来存放配置文件相关的
│   ├── fastcgi.conf # fastcgi相关配置文件
│   ├── fastcgi.conf.default # fastcgi.conf的备份文件

│   ├── fastcgi_params # fastcgi的参数文件
│   ├── fastcgi_params.default # fastcgi的参数备份文件

│   ├── koi-utf 
│   ├── koi-win

│   ├── mime.types # 媒体类型,记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
│   ├── mime.types.default # mime.types的备份文件
│   ├── nginx.conf # 这个是Nginx的核心配置文件
│   ├── nginx.conf.default # nginx.conf的备份文件

│   ├── scgi_params # scgi的参数文件
│   ├── scgi_params.default # scgi的参数备份文件
│   ├── uwsgi_params # uwsgi的参数文件
│   ├── uwsgi_params.default # uwsgi的参数备份文件

│   └── win-utf # koi-utf、koi-win、win-utf这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码

├── fastcgi_temp
├── html # 存放nginx自带的两个静态的html页面
│   ├── 50x.html # 访问失败后的失败页面
│   └── index.html # 成功访问的默认首页
├── logs # 记录入门的文件,当nginx服务器启动后,这里面会有 access.log error.log 和nginx.pid三个文件出现
│   ├── access.log # 访问日志
│   ├── error.log # 错误日志
│   └── nginx.pid # nginx进程的PID
├── proxy_temp
├── sbin # nginx的主程序
│   └── nginx # nginx是用来控制Nginx的启动和停止等相关的命令
├── scgi_temp
└── uwsgi_temp
more /usr/local/nginx/logs/nginx.pid

tail -f /usr/local/nginx/logs/access.log

tail -f /usr/local/nginx/logs/error.log

在这里插入图片描述

1.10.Nginx服务器启动、重启和停止Nginx的服务

1.10.1.方式一:Nginx服务的信号控制

Nginx中的master和worker进程?
Nginx的工作方式?
如何获取进程的PID?
信号有哪些?
如何通过信号控制Nginx的启停等相关操作?

前面在提到Nginx的高性能,其实也和它的架构模式有关。Nginx默认采用的是多进程的方式来工作的,当将Nginx启动后,我们通过ps -ef | grep nginx命令可以查看到如下内容:

ps -ef | grep nginx

在这里插入图片描述

从上图中可以看到,Nginx后台进程中包含一个master进程和多个worker进程,master进程主要用来管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程。而worker进程则是专门用来处理用户请求的,各个worker进程之间是平等的并且相互独立,处理请求的机会也是一样的。nginx的进程模型,我们可以通过下图来说明下:
在这里插入图片描述

我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx,这个时候我们需要有两个前提条件,一个是要操作的master进程,一个是信号。

1.10.1.1.要想操作Nginx的master进程,就需要获取到master进程的进程号ID。

方式一:通过ps -ef | grep nginx

ps -ef | grep nginx

方式二:在讲解nginx的./configure的配置参数的时候,有一个参数是--pid-path=PATH默认是/usr/local/nginx/logs/nginx.pid,所以可以通过查看该文件来获取nginx的master进程ID.

more /usr/local/nginx/logs/nginx.pid

在这里插入图片描述

1.10.1.2.信号
信号作用
TERM/INT立即关闭整个服务
QUIT"优雅"地关闭整个服务
HUP重读配置文件并使用服务对新配置项生效
USR1重新打开日志文件,可以用来进行日志切割
USR2平滑升级到最新版的nginx
WINCH所有子进程不在接收处理新连接,相当于给work进程发送QUIT指令

调用命令为kill -signal PID

signal:即为信号;PID即为获取到的master线程ID

  1. 发送TERM/INT信号给master进程,会将Nginx服务立即关闭。
kill -TERM PID
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`

kill -INT PID
kill -INT `cat /usr/local/nginx/logs/nginx.pid`
  1. 发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
kill -QUIT PID
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程
kill -HUP PID
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 发送USR1信号给master进程,告诉Nginx重新开启日志文件
kill -USR1 PID
kill -TERM `cat /usr/local/nginx/logs/nginx.pid`
  1. 发送USR2信号给master进程,告诉master进程要平滑升级,这个时候,会重新开启对应的master进程和work进程,整个系统中将会有两个master进程,并且新的master进程的PID会被记录在/usr/local/nginx/logs/nginx.pid而之前的旧的master进程PID会被记录在/usr/local/nginx/logs/nginx.pid.oldbin文件中,接着再次发送QUIT信号给旧的master进程,让其处理完请求后再进行关闭
kill -USR2 PID
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`
kill -QUIT PID
kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  1. 发送WINCH信号给master进程,让master进程控制不让所有的work进程在接收新的请求了,请求处理完后关闭work进程。注意master进程不会被关闭掉
kill -WINCH PID /kill -WINCH`cat /usr/local/nginx/logs/nginx.pid`

1.10.2.方式二:Nginx的命令行控制参数使用

此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,我们可以通过./nginx -h来查看都有哪些参数可以用:

[root@192 sbin]# ./nginx -h
nginx version: nginx/1.24.0
Usage: nginx [-?hvVtTq] [-s signal] [-p prefix]
             [-e filename] [-c filename] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -T            : test configuration, dump it and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/nginx/)
  -e filename   : set error log file (default: /usr/local/nginx/logs/error.log)
  -c filename   : set configuration file (default: /usr/local/nginx/conf/nginx.conf)
  -g directives : set global directives out of configuration file
  • -?和-h:显示帮助信息

  • -v:打印版本号信息并退出

  • -V:打印版本号信息和配置信息并退出

  • -t:测试nginx的配置文件语法是否正确并退出

  • -T:测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后退出

  • -q:在配置测试期间禁止显示非错误消息

  • -s:signal信号,后面可以跟 :

    • stop [快速关闭,类似于TERM/INT信号的作用]

    • quit [优雅的关闭,类似于QUIT信号的作用]

    • reopen [重新打开日志文件类似于USR1信号的作用]

    • reload [类似于HUP信号的作用]

  • -p:prefix,指定Nginx的prefix路径,(默认为:/usr/local/nginx/)

  • -c:filename,指定Nginx的配置文件路径,(默认为: /usr/local/nginx/conf/nginx.conf)

  • -g:用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.11.Nginx服务器版本升级和新增模块

如果想对Nginx的版本进行更新,或者要应用一些新的模块,最简单的做法就是停止当前的Nginx服务,然后开启新的Nginx服务。但是这样会导致在一段时间内,用户是无法访问服务器。为了解决这个问题,我们就需要用到Nginx服务器提供的平滑升级功能。这个也是Nginx的一大特点,使用这种方式,就可以使Nginx在7*24小时不间断的提供服务了。接下来我们分析下需求:

需求:Nginx的版本最开始使用的是nginx-1.22.1,由于服务升级,需要将Nginx的版本升级到nginx-1.24.0,要求Nginx不能中断提供服务。

为了应对上述的需求,这里我们给大家提供两种解决方案:

方案一:使用Nginx服务信号完成Nginx的升级

方案二:使用Nginx安装目录的make命令完成升级

1.11.1.环境准备

1.11.1.1.先准备两个版本的Nginx分别是 1.22.1和1.24.0

在这里插入图片描述

1.11.1.2.使用Nginx源码安装的方式将1.22.1版本安装成功并正确访问
进入安装目录
./configure

make && make install

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

1.11.1.3.将Nginx1.24.0进行参数配置和编译,不需要进行安装。
进入安装目录
./configure

make 

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.11.2.方案一:使用Nginx服务信号进行升级

1.11.2.1.将1.22.1版本的sbin目录下的nginx进行备份
cd /usr/local/nginx/sbin

mv nginx nginxold

在这里插入图片描述

1.11.2.2.将Nginx1.24.0安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd /nginx/core/nginx-1.24.0/objs

cp nginx /usr/local/nginx/sbin

在这里插入图片描述

1.11.2.3.发送信号USR2给Nginx的1.22.1版本对应的master进程
kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

在这里插入图片描述

1.11.2.4.发送信号QUIT给Nginx的1.22.1版本对应的master进程
kill -QUIT `more /usr/local/logs/nginx.pid.oldbin`

在这里插入图片描述

1.11.3.方案二:使用Nginx安装目录的make命令完成升级

1.11.3.1.将1.22.1版本的sbin目录下的nginx进行备份
cd /usr/local/nginx/sbin

mv nginx nginxold

在这里插入图片描述

1.11.3.2.将Nginx1.24.0安装目录编译后的objs目录下的nginx文件,拷贝到原来/usr/local/nginx/sbin目录下
cd /nginx/core/nginx-1.24.0/objs

cp nginx /usr/local/nginx/sbin

在这里插入图片描述

1.11.3.3.进入到安装目录,执行make upgrade
make upgrade

在这里插入图片描述

1.11.3.4.查看是否更新成功
cd /usr/local/nginx/sbin

./nginx -v

在这里插入图片描述

在整个过程中,其实Nginx是一直对外提供服务的。并且当Nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的,同时我们可以通过更改html目录下的页面来修改我们在页面上所看到的内容。

1.12.安装成系统服务,通过systemctl方法来启动nginx

1.12.1.创建脚本

vi /usr/lib/systemd/system/nginx.service

1.12.2.服务脚本内容

[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
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式ExecStartpre是检查配置文件
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

1.12.3.进行权限设置

chmod 755 /usr/lib/systemd/system/nginx.service

1.12.4.开机启动

# 重新加载系统服务
systemctl daemon-reload

# 启动服务
systemctl start nginx

#停止
systemctl stop nginx

#重启
systemctl restart nginx

#重新加载配置文件
systemctl reload nginx

# 查看nginx状态
systemctl status nginx

# 开机启动
systemctl enable nginx.service

# 查看nginx是否启动
ps -ef | grep nginx

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.13.Nginx核心配置文件结构

Nginx的核心配置文件默认是放在/usr/local/nginx/conf/nginx.conf

1.13.1.Nginx基础配置文件nginx.conf 内容解读和基本配置方法

# 指令名	指令值;  #全局块,主要设置Nginx服务器整体运行的配置指令
worker_processes  1;  # 默认为1,表示开启一个业务进程

# events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events { # 事件驱动模块
    worker_connections  1024; # 单个业务进程可接受连接数
}

# http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...  
http {
    include       mime.types; # 引入http mime类型
    default_type  application/octet-stream; # 如果mime类型没有匹配上,默认使用二进制流的方式传输
    sendfile        on; # 使用limux的sendfile(socket,file,len)高效网络传输,也就是数据0拷贝
    keepalive_timeout  65;

	# server块,是Nginx配置和虚拟主机vhost相关的内容
    server { # 虚拟主机配置
        listen       80; # 监听端口号80
        server_name  localhost; # 域名、主机名
        #  location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
        location / { # 匹配路径
            root   html; # 文件根目录
            index  index.html index.htm; # 默认页名称
        }
        error_page   500 502 503 504  /50x.html; # 报编码错误对应页面
        location = /50x.html {
            root   html;
        }
    }

}

1.13.2.未开启sendfile

在这里插入图片描述

1.13.3.开启sendfile on;

在这里插入图片描述

简单小结下:

nginx.conf配置文件中默认有三大块:全局块、events块、http块

http块中可以配置多个server块,每个server块又可以配置多个location块。

1.13.4.全局块

1.13.4.1.user指令
1.13.4.1.1.user:用于配置运行Nginx服务器的worker进程的用户和用户组。
语法user user [group]
默认值nobody
位置全局块

该属性也可以在编译的时候指定,语法如下./configure --user=user --group=group,如果两个地方都进行了设置,最终生效的是配置文件中的配置。
在这里插入图片描述

1.13.4.1.2.设置一个用户信息"www"
cd /usr/local/nginx/conf

vim nginx.conf

# 添加以下内容
user www;

cd /usr/local/nginx/sbin

./nginx -t

在这里插入图片描述

1.13.4.1.3.创建一个用户
useradd www

# 删除一个用户
userdel -rf www
1.13.4.1.4.修改user属性
user www

在这里插入图片描述

1.13.4.1.5.创建/root/html/index.html页面,添加如下内容
mkdir -p /root/html

vi /root/html/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>欢迎来到 nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>欢迎来到 nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>谢谢使用 nginx.</em></p>
<p><em>I am WWW</em></p>
</body>
</html>

在这里插入图片描述

1.13.4.1.6.修改nginx.conf
vi /usr/local/nginx/conf/nginx.conf
location / {
	root   /root/html;
	index  index.html index.htm;
}

在这里插入图片描述

1.13.4.1.7.测试启动访问–403

在这里插入图片描述

1.13.4.1.8.分析原因:因为当前用户没有访问/root/html目录的权限

在这里插入图片描述

1.13.4.1.9.将文件创建到 /home/www/html/index.html,修改配置
mkdir -p /home/www

cd /home/www

cp -r /root/html/ ./

vi /usr/local/nginx/conf/nginx.conf

cd /usr/local/nginx/sbin
location / {
	root   /home/www/html;
	index  index.html index.htm;
}

在这里插入图片描述

1.13.4.1.10.再次测试启动访问

在这里插入图片描述

综上所述,使用user指令可以指定启动运行工作进程的用户及用户组,这样对于系统的权限访问控制的更加精细,也更加安全。

1.13.4.2.work process指令

master_process:用来指定是否开启工作进程。

语法master_process on|off;
默认值master_process on;
位置全局块

在这里插入图片描述

worker_processes:用于配置Nginx生成工作进程的数量,这个是Nginx服务器实现并发处理服务的关键所在。理论上来说workder process的值越大,可以支持的并发处理量也越多,但事实上这个值的设定是需要受到来自服务器自身的限制,建议将该值和服务器CPU的内核数保存一致

语法worker_processes num/auto;
默认值1
位置全局块

如果将worker_processes设置成2,则会看到如下内容:

在这里插入图片描述

1.13.4.3.其他指令

daemon:设定Nginx是否以守护进程的方式启动。

守护式进程是linux后台执行的一种服务进程,特点是独立于控制终端,不会随着终端关闭而停止。

语法daemon on|off;
默认值daemon on;
位置全局块

在这里插入图片描述

pid:用来配置Nginx当前master进程的进程号ID存储的文件路径。

语法pid file;
默认值默认为:/usr/local/nginx/logs/nginx.pid
位置全局块

该属性可以通过./configure --pid-path=PATH来指定

error_log:用来配置Nginx的错误日志存放路径

语法error_log file [日志级别];
默认值error_log logs/error.log error;
位置全局块、http、server、location

该属性可以通过./configure --error-log-path=PATH来指定

其中日志级别的值有:debug|info|notice|warn|error|crit|alert|emerg,翻译过来为调试|信息|通知|警告|错误|临界|警报|紧急,这块建议大家设置的时候不要设置成info以下的等级,因为会带来大量的磁盘I/O消耗,影响Nginx的性能

1.13.4.4.include:用来引入其他配置文件,使Nginx的配置更加灵活
语法include file;
默认值
位置any

在这里插入图片描述

1.13.5.events块

1.13.5.1.accept_mutex:用来设置Nginx网络连接序列化
语法accept_mutex on|off;
默认值accept_mutex on;
位置events

这个配置主要用来解决常说的"惊群"问题。
大致意思是在某一个时刻,客户端发来一个请求连接,Nginx后台是以多进程的工作模式,也就是说有多个worker进程会被同时唤醒,但是最终只会有一个进程可以获取到连接,如果每次唤醒的进程数目太多,就会影响Nginx的整体性能。
如果将上述值设置为on(开启状态),将会对多个Nginx进程接收连接进行序列号,一个个来唤醒接收,就防止了多个进程对连接的争抢。

在这里插入图片描述

1.13.5.2.multi_accept:用来设置是否允许同时接收多个网络连接
语法multi_accept on|off;
默认值multi_accept off;
位置events

如果multi_accept被禁止了,nginx一个工作进程只能同时接受一个新的连接。否则,一个工作进程可以同时接受所有的新连接

1.13.5.3.worker_connections:用来配置单个worker进程最大的连接数
语法worker_connections number;
默认值worker_commections 512;
位置events

这里的连接数不仅仅包括和前端用户建立的连接数,而是包括所有可能的连接数。另外,number值不能大于操作系统支持打开的最大文件句柄数量。

1.13.5.4.use:用来设置Nginx服务器选择哪种事件驱动来处理网络消息。
语法use method;
默认值根据操作系统定
位置events

注意:此处所选择事件处理模型是Nginx优化部分的一个重要内容,method的可选值有select/poll/epoll/kqueue等,之前在准备centos环境的时候,我们强调过要使用linux内核在2.6以上,就是为了能使用epoll函数来优化Nginx。

另外这些值的选择,我们也可以在编译的时候使用

--with-select_module--without-select_module

--with-poll_module --without-poll_module来设置是否需要将对应的事件驱动模块编译到Nginx的内核。

1.13.5.5.events指令配置实例

打开Nginx的配置文件 nginx.conf,添加如下配置

events {
	#设置Nginx网络连接序列化
	accept_mutex on;
	#设置Nginx的worker进程是否可以同时接收多个请求
	multi_accept on;
	#设置Nginx的worker进程最大的连接数
	worker_connections 1024;
	#设置Nginx使用的事件驱动模型
	use epoll;
}

在这里插入图片描述

启动测试

./nginx -t
./nginx -s reload

1.13.6.http块

1.13.6.1.定义MIME-Type

我们都知道浏览器中可以显示的内容有HTML、XML、GIF等种类繁多的文件、媒体等资源,浏览器为了区分这些资源,就需要使用MIME Type。所以说MIME Type是网络资源的媒体类型。Nginx作为web服务器,也需要能够识别前端请求的资源类型。

在Nginx的配置文件中,默认有两行配置

include mime.types;
default_type application/octet-stream;
location /get_text {
    return 200 "<h1>This is Nginx's Text</h1>";
}

在这里插入图片描述

1.13.6.2.default_type:用来配置Nginx响应前端请求默认的MIME类型。
语法default_type mime-type;
默认值default_type text/plain;
位置http、server、location

在default_type之前还有一句include mime.types,include之前我们已经介绍过,相当于把mime.types文件中MIMT类型与相关类型文件的文件后缀名的对应关系加入到当前的配置文件中。

举例来说明:

有些时候请求某些接口的时候需要返回指定的文本字符串或者json字符串,如果逻辑非常简单或者干脆是固定的字符串,那么可以使用nginx快速实现,这样就不用编写程序响应请求了,可以减少服务器资源占用并且响应性能非常快。

如何实现:

location /get_text {
	#这里也可以设置成text/plain
    default_type text/html;
    return 200 "<h1>This is Nginx's Text</h1>";
}
location /get_json{
    default_type application/json;
    return 200 '{"name":"TOM","age":18}';
}

在这里插入图片描述

在这里插入图片描述

1.13.6.3.自定义服务日志

Nginx中日志的类型分access.log、error.log。

access.log:用来记录用户所有的访问请求。

error.log:记录nginx本身运行时的错误信息,不会记录用户的访问请求。

Nginx服务器支持对服务日志的格式、大小、输出等进行设置,需要使用到两个指令,分别是access_log和log_format指令。

(1)access_log:用来设置用户访问日志的相关属性。

语法access_log path[format[buffer=size]]
默认值access_log logs/access.log combined;
位置http, server, location

(2)log_format:用来指定日志的输出格式。

语法log_format name [escape=default|json|none] string…;
默认值log_format combined “…”;
位置http
    #access_log  logs/access.log  main;
    log_format myformat '==========> This is My Format:$http_user_agent';
    access_log logs/my.log myformat;

在这里插入图片描述

在这里插入图片描述

1.13.6.4.其他配置指令

(1)sendfile:用来设置Nginx服务器是否使用sendfile()传输文件,该属性可以大大提高Nginx处理静态资源的性能

语法sendfile on|off;
默认值sendfile off;
位置http、server、location

(2)keepalive_timeout:用来设置长连接的超时时间。

为什么要使用keepalive?

我们都知道HTTP是一种无状态协议,客户端向服务端发送一个TCP请求,服务端响应完毕后断开连接。

如何客户端向服务端发送多个请求,每个请求都需要重新创建一次连接,效率相对来说比较多,使用keepalive模式,
可以告诉服务器端在处理完一个请求后保持这个TCP连接的打开状态,若接收到来自这个客户端的其他请求,
服务端就会利用这个未被关闭的连接,而不需要重新创建一个新连接,提升效率,但是这个连接也不能一直保持,
这样的话,连接如果过多,也会是服务端的性能下降,这个时候就需要我们进行设置其的超时时间。
语法keepalive_timeout time;
默认值keepalive_timeout 75s;
位置http、server、location

(3)keepalive_requests:用来设置一个keep-alive连接使用的次数。

语法keepalive_requests number;
默认值keepalive_requests 100;
位置http、server、location

在这里插入图片描述

1.13.7.server块和location块

	server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
       
        error_page   500 502 503 504 404  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

1.14.nginx.conf 和 常用文件

worker_processes  1;

events { 
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server { 
        listen       80;
        server_name  localhost;
        
        location / { 
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

}
# 指令名	指令值;  #全局块,主要设置Nginx服务器整体运行的配置指令
worker_processes  1;  # 默认为1,表示开启一个业务进程

# events块,主要设置,Nginx服务器与用户的网络连接,这一部分对Nginx服务器的性能影响较大
events { # 事件驱动模块
	accept_mutex on; #设置Nginx网络连接序列化,防止多个进程对连接的争抢
	multi_accept on; #设置Nginx的worker进程是否可以同时接收多个网络请求
	worker_connections 1024; # 设置Nginx单个worker进程最大的连接数
	use epoll; #设置Nginx使用的事件驱动模型,使用epoll函数来优化Ngin
}

# http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置...  
http {
    include       mime.types; # 引入http mime类型
    default_type  application/octet-stream; # 如果mime类型没有匹配上,默认使用二进制流的方式传输
    sendfile        on; # 使用limux的sendfile(socket,file,len)高效网络传输,也就是数据0拷贝
    tcp_nopush      on; # 主要是用来提升网络包的传输效率
    tcp_nodelay     on; # 提高网络包传输的实时性
    keepalive_timeout  65;
    
    include nginx_gzip.conf;

	# server块,是Nginx配置和虚拟主机vhost相关的内容
    server { # 虚拟主机配置
        listen       80; # 监听端口号80
        server_name  localhost; # 域名、主机名
        #  location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
        location / { # 匹配路径
            root   html; # 文件根目录
            index  index.html index.htm; # 默认页名称
        }
        error_page   500 502 503 504  /50x.html; # 报编码错误对应页面
        location = /50x.html {
            root   html;
        }
    }

}

nginx_gzip.conf

# Gzip压缩功能的实例配置
gzip on;  			  #开启gzip功能
gzip_types *;		  #压缩源文件类型,根据具体的访问资源类型设定
gzip_comp_level 6;	  #gzip压缩级别
gzip_min_length 1024; #进行压缩响应页面的最小长度,content-length
gzip_buffers 4 16K;	  #缓存空间大小
gzip_http_version 1.1; #指定压缩响应所需要的最低HTTP请求版本
gzip_vary  on;		  #往头信息中添加压缩标识
gzip_disable "MSIE [1-6]\."; #对IE6以下的版本都不进行压缩
gzip_proxied  off; #nginx作为反向代理压缩服务端返回数据的条件
gzip on;
gzip_types *;
gzip_comp_level 6;
gzip_min_length 1024;
gzip_buffers 4 16K;
gzip_http_version 1.1;
gzip_vary  on;
gzip_disable "MSIE [1-6]\.";
gzip_proxied  off;
./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 \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-stream
# 编译安装
make & make install

endl

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

跟着cherno手搓游戏引擎【12】渲染context和首个三角形

渲染上下文&#xff1a; 目的&#xff1a;修改WindowsWindow的结构&#xff0c;把glad抽离出来 WindowsWindow.h:新建m_Context #pragma once #include "YOTO/Window.h" #include <YOTO/Renderer/GraphicsContext.h> #include<GLFW/glfw3.h> #include…

Ps:将文件载入堆栈

Ps菜单&#xff1a;文件/脚本/将文件载入堆栈 Scripts/Load Files into Stack 将文件载入堆栈 Load Files into Stack脚本命令可用于将两个及以上的文件载入到同一个 Photoshop 新文档中。 载入的每个文件都将成为独立的图层&#xff0c;并使用其原始文件名作为图层名。 Photos…

GraphicsMagick 的 OpenCL 开发记录(二十五)

文章目录 如何修复R6025 pure virtual function call问题 <2022-04-19 周二> 如何修复R6025 pure virtual function call问题 运气好&#xff0c;修复了这个问题。即&#xff0c;在ExitInstance()函数中调用一下MagickLib::DestroyMagick();即可。 过程中也经历了尝试…

CSS探索浏览器兼容性

学习如何探索浏览器的兼容性对于编写跨浏览器兼容的CSS代码非常重要。以下是一些学习CSS兼容性的方法&#xff1a; MDN文档&#xff1a;Mozilla开发者网络&#xff08;MDN&#xff09;提供了广泛而详细的CSS文档&#xff0c;其中包含有关CSS属性、选择器和功能的信息。在MDN上…

最新技术实战 | 无视杀软使用远控工具进行横向移动Tips

最新技术实战 | 无视杀软使用远控工具进行横向移动Tips。 杀软是什么意思&#xff1f;杀软是杀毒软件的简称&#xff0c;取的杀毒首字与软件首字组合而成&#xff0c;将杀毒软件简要的称之为杀软&#xff0c;所以&#xff0c;杀软的意思就是杀毒软件&#xff0c;专注于信息领域…

day34_js

今日内容 0 复习昨日 1 事件 1.1 事件介绍 1.2 事件绑定方式 1.3 不同事件的演示 2 DOM操作 2.1 概述 2.2 查找元素 2.3 元素内容的查找和设置 2.4 元素属性的查找和设置 2.5 元素CSS样式的查找和设置 2.6 创建元素 2.7 创建文本节点 2.8 追加元素 2.9 删除元素 3 案例练习 0 复…

基于springboot+vue的明星周边产品销售网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 研究背景…

如何快速在阿里云上更新幻兽帕鲁服务器?

如何快速在阿里云上更新幻兽帕鲁服务器&#xff1f;幻兽帕鲁更新之后&#xff0c;服务器需要同步更新才能继续游戏&#xff0c;大家可以按照文章操作完成服务升级。 1、如果大家是通过阿里云计算巢部署的&#xff0c;请参考&#xff1a;计算巢部署更新方式。 2、如果不是通过阿…

前端——HTML

目录 文章目录 前言 一.HTML的基本标签 二.HTML标签 1.块级标签 1.1块级标签特征 1.2标题标签 ​编辑 1.3 水平线标签 1.4 段落标签 1.5 无序列表标签 1.6 有序列表标签 1.7 表格标签 1.8层标签 1.9 表单 2. 行级标签 2.1行级标签特征 2.2图像标签 2.3 范围…

epoll示例

一、服务端 下面是一个使用epoll机制在Linux上编写的简单套接字程序示例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include &l…

一天吃透面试八股文

内容摘自我的学习网站&#xff1a;topjavaer.cn 分享50道Java并发高频面试题。 线程池 线程池&#xff1a;一个管理线程的池子。 为什么平时都是使用线程池创建线程&#xff0c;直接new一个线程不好吗&#xff1f; 嗯&#xff0c;手动创建线程有两个缺点 不受控风险频繁创…

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编

滴水逆向三期笔记与作业——02C语言——10 Switch语句反汇编 一、Switch语句1、switch语句 是if语句的简写2、break加与不加有什么特点?default语句可以省略吗&#xff1f;3、游戏中的switch语句&#xff08;示例&#xff09;4、添加case后面的值&#xff0c;一个一个增加&…

LLM之llm-viz:llm-viz(3D可视化GPT风格LLM)的简介、安装和使用方法、案例应用之详细攻略

LLM之llm-viz&#xff1a;llm-viz(3D可视化GPT风格LLM)的简介、安装和使用方法、案例应用之详细攻略 目录 llm-viz的简介 1、LLM可视化 2、CPU模拟&#xff08;WIP&#xff1b;尚未公开&#xff01;&#xff09; llm-viz的安装和使用方法 llm-viz的案例应用 1、三维可视化…

【云原生】k8s图形化管理工具之rancher

k8s的图形化工具-----rancher rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s区别: 都是为了容器的调度和编排系统&#xff0c;但是rancher不仅能够调度&#xff0c;还能管理k8s集群&#xff0c;自带监控(普罗米修斯)&#xff0c;大公司都是图形化。 ranche…

Stable Diffusion与Midjourney:如何做出明智之选?

Stable Diffusion与Midjourney&#xff1a;如何做出明智之选&#xff1f; 在人工智能领域中&#xff0c;Stable Diffusion和Midjourney是两个备受瞩目的技术。它们各自具有独特的特点和优势&#xff0c;但选择哪一个更适合您的需求呢&#xff1f;本文将为您详细分析两者的差异…

Linux 驱动开发基础知识—— 具体单板的 LED 驱动程序(五)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;一名喜欢分享和记录学习的在校大学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;V…

蓝桥小白赛4 乘飞机 抽屉原理 枚举

&#x1f468;‍&#x1f3eb; 乘飞机 &#x1f437; 抽屉原理 import java.util.Scanner;public class Main {static int N 100010;static int[] a new int[N];public static void main(String[] args){Scanner sc new Scanner(System.in);int n sc.nextInt();int q s…

大数据安全 | 期末复习(下)

文章目录 &#x1f4da;安全策略和攻击&#x1f34b;&#x1f407;安全协议&#x1f407;IPsee&#x1f407;SSL&#x1f407;SSH&#x1f407;S/MIME协议&#x1f407;公钥基础设施PKI&#x1f407;PGP&#x1f407;HTTPS&#x1f407;防火墙&#x1f407;防毒墙&#x1f407;…

Django学习之小试牛刀

六、Django学习之小试牛刀 其他关于Python Web开发笔记&#xff1a;&#xff08;如果遇到问题可以一起交流~&#xff09; 一、Flask学习之HTML-CSDN博客 二、Flask学习之CSS-CSDN博客 【接上篇】二、Flask学习之CSS&#xff08;下篇&#xff09;-CSDN博客 三、Flask学习之B…

支付宝开通GPT4.0,最新经验分享

ChatGPT是由OpenAI开发的一种生成式对话模型&#xff0c;具有生成对话响应的能力。它是以GPT&#xff08;Generative Pre-trained Transformer&#xff09;为基础进行训练的&#xff0c;GPT是一种基于Transformer架构的预训练语言模型&#xff0c;被广泛用于各种自然语言处理任…