Nginx入门

前言

好记性不如烂笔头! 我对这句话越来越深信不疑了!大约3个月前陆陆续续学习了一些关于nginx的知识,当时都听懂了,但是课后没有练习,又加上长时间没用,导致关于nginx的知识全都还给了老师。昨天同事问我一个应该是很贱的问题,我居然回答不上来。于是顿感不安,赶紧捡起来重新学习,这次一定要记笔记!!!立帖为证。

1. nginx下载

nginx官网:http://nginx.org/
在这里插入图片描述
进入下载页面:
在这里插入图片描述

在这里插入图片描述
nginx历史版本下载地址:https://nginx.org/download/

特别注意: 我这里在虚拟机上安装了一台Centos7.6版本的Linux系统,以后所有操作均在Linux系统上演示nginx的用法。
准备一个内核为2.6及以上版本的操作系统,因为linux2.6及以上内核才支持epoll,而Nginx需要解决高并发压力问题是需要用到epoll,所以我们需要有这样的版本要求。
我们可以使用 uname -a 命令来查询linux的内核版本。
在这里插入图片描述
建议大家把防火墙都关闭掉,因为把防火墙关闭掉,可以省掉后续Nginx学习过程中遇到的诸多问题。
关闭的方式有如下两种:

  1. systemctl stop firewalld 关闭运行的防火墙,系统重新启动后,防火墙将重新打开;
  2. systemctl disable firewalld 永久关闭防火墙,,系统重新启动后,防火墙依然关闭。
    查看防火墙状态的命令:
    systemctl status firewalld
    在这里插入图片描述
    这里我把防火墙给关闭了。
    确认停用selinux
    selinux(security-enhanced linux),美国安全局对于强制访问控制的实现,在linux2.6内核以后的版本中,selinux已经成功内核中的一部分。可以说selinux是linux史上最杰出的新安全子系统之一。虽然有了selinux,我们的系统会更安全,但是对于我们的学习Nginx的历程中,会多很多设置,所以这块建议大家将selinux进行关闭。
    首先查看selinux的状态:sestatus
    在这里插入图片描述
    我这里已经停用了selinux,若不是请使用以下命令修改:vim /etc/selinux/config
    在这里插入图片描述
    和Windows系统一样,在Linux系统中,文件的存放位置也不是随便的。因此我先在家目录~下创建目录~/nginx/core,然后使用wget命令直接将nginx下载到该目录中:
    在这里插入图片描述
    在这里插入图片描述
    如上图所示,nginx已经下载。
    然后对下载的nginx安装包进行解压:
    在这里插入图片描述
    解压之后再次查看core目录发现多了个文件夹:
    在这里插入图片描述
    接下来的安装就要使用到我们解压之后的文件夹了。

2. nginx安装

nginx安装有3种:

  1. 通过Nginx源码安装(2种):
    1.1 通过Nginx源码简单安装 ;
    1.2 通过Nginx源码复杂安装 。
  2. 通过yum安装 。

2.0 安装之前的准备工作

如果通过Nginx源码安装需要提前准备的内容:

2.0.1 GCC编译器

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

安装命令:yum install -y gcc
查看是否安装成功命令:gcc --version
在这里插入图片描述

2.0.2 PCRE兼容正则表达式库

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

安装命令: yum install -y pcre pcre-devel
查看是否安装成功命令: rpm -qa pcre pcre-devel

2.0.3 zlib压缩库

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

安装命令: yum install -y zlib zlib-devel
查看是否安装成功命令: rpm -qa zlib zlib-devel

2.0.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 opensslopenssl-devel

2.0.5 关闭防火墙

我们在使用Nginx的时候,要先关闭Linux系统的防火墙,否则在虚拟机上安装好Nginx之后,虚拟机本地可以访问,但是我们在本机上访问不到的。
命令:
systemctl status firewalld:查看防火墙状态;
在这里插入图片描述
systemctl stop firewalld:临时关闭防火墙,下次开机防火墙还是会自动启动;
在这里插入图片描述

systemctl disable firewalld:永久关闭防火墙,下次开机也不会启动。
若要重新启用防火墙,使用命令:systemctl enable firewalld

2.1 通过源码简单安装

将下载的压缩包进行解压,解压命令:tar -zxvf nginx-1.22.1.tar.gz
在这里插入图片描述

解压之后的得到文件夹nginx-1.22.1。接下来进入已解压的nginx文件夹:

在这里插入图片描述
config是一个二进制的可执行文件。我们通过以下命令完整nginx的安装。
在该文件夹下执行3个命令:

  1. 配置: ./configure
    当出现以下内容则表明configure命令执行成功:
    在这里插入图片描述
  2. 编译:make
  3. 安装:make install
    其中2、3命令可以合并执行,命令为:make && make install
    至此,通过源码简单安装完成。

这里有个疑问:通过源码简单安装之后,nginx被安装到了哪个目录呢?

答:若我们使用通过源码简单安装的方式安装nginx,默认安装到 /usr/local/nginx目录下:

在这里插入图片描述
sbin文件夹中存放的是对nginx执行操作的具体命令。
启动nginx:
进入到sbin目录下,执行命令:
启动nginx命令:./nginx
输入启动nginx的虚拟机Linux的主机地址,我这里为:192.168.25.138,可以看到如下页面:
在这里插入图片描述
nginx默认代理的是80端口,而若主机地址是80可以不输入。
至此,通过源码简单安装的方式安装nginx成功!

2.2 通过源码复杂安装

同样都属于nginx源码安装,但是复杂安装还是有一些区别的。通过源码简单安装执行命令./configure时没有带任何参数,但是复杂安装时,我们要手动指定一些编译参数,一般可以设置的参数如下:

  1. PATH:是和路径相关的配置信息;
  2. with:是启动模块,默认是关闭的;
  3. without:是关闭模块,默认是开启的。
    通过源码复杂安装中针对./configure的说明:
    在这里插入图片描述
    上图展示了很多使用./configure --XXX的命令。实际上通过命令./configure我们可以
  4. 指定nginx的安装路径、日志路径等关于路径的设定;
  5. 添加一些第三方模块,扩展nginx的功能;
  6. 移除一些模块,去除nginx不用的模块,减小nginx的体积。

对一些具体编译命令的说明:

--prefix=PATH:指向Nginx的安装目录,默认值为/usr/local/nginx;

--sbin-path=PATH:指向(执行)程序文件(nginx)的路径,默认值为/sbin/nginx;

--modules-path=PATH:指向Nginx动态模块安装目录,默认值为/modules;

--conf-path=PATH:指向配置文件(nginx.conf)的路径,默认值为/conf/nginx.conf;

--error-log-path=PATH:指向错误日志文件的路径,默认值为/logs/error.log;

--http-log-path=PATH:指向访问日志文件的路径,默认值为/logs/access.log;

--pid-path=PATH:指向Nginx启动后进行ID的文件路径,默认值为/logs/nginx.pid;

--lock-path=PATH:指向Nginx锁文件的存放路径,默认值为/logs/nginx.lock。

因此,复杂安装与简单安装步骤除了执行./configure不同外,别的都相同。使用复杂安装来安装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

2.3 通过yum安装

使用源码进行简单安装,我们会发现需要提前安装的东西太多,而且安装的过程也比较繁琐。但是使用yum进行安装会简单很多。
使用yum安装nginx的步骤:

  1. 安装yum-utils:sudo yum install -y yum-utils
  2. 添加yum源文件:vim /etc/yum.repos.d/nginx.repo,将以下文件粘贴到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/$re
leasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

我们通过yum安装的方式安装nginx的官网安装步骤http://nginx.org/en/linux_packages.html#RHEL是一致的:
注意,在官网查找yum安装nginx时,由于我是在centos把版本的Linux系统上安装nginx,因此选择下面这个
在这里插入图片描述

保存并退出。
3. 查看nginx是否配置成功:yum list | grep nginx
4. 使用yum安装nginx:sudo yum install -y nginx;其中-y代表安装过程中的yes/no我们一律自动选择yes.
5. 通过1、2、3、4步骤就安装好了nginx,查看nginx的安装位置:where is nginx,此命令在使用源码进行简单安装时,命令不起作用。
使用yum安装nginx之后,启动nginx,命令:./nginx
在这里插入图片描述

源码简单安装与yum安装的区别:
我们通过命令:./nginx -V来查看安装的nginx的版本及相关配置信息。
yum安装:
在这里插入图片描述
简单装:
在这里插入图片描述
也就是说,yum安装比简单安装要多出许多配置的信息,比如指定安装目录,错误日志存放路径等等。

在windows操作平台下,查看nginx的PID命令:
tasklist /fi "imagename eq nginx.exe"
在这里插入图片描述

3. nginx卸载

卸载nginx有3步:

步骤一:需要将nginx的进程关闭:进入到nginx的安装目录,我这里将nginx安装在目录**/usr/local/nginx下,进入到安装目录的sbin文件夹下执行命令:./nginx -s stop
在这里插入图片描述
步骤二:将安装的nginx删除:我这里回到
/usr/local**目录下,删除nginx,命令:rm -rf /usr/local/nginx
在这里插入图片描述
步骤三:进入到解压之后的nginx文件夹,将安装包之前编译的环境清除:make clean
在这里插入图片描述

4. nginx目录

我们要清楚在linux环境下,nginx目录包括从nginx官网下载安装压缩包并对其解压之后得到的文件夹和安装nginx之后得到的安装文件夹

4.1 nginx解压文件夹目录

进入到我们从nginx官网下载的压缩包的解压之后的文件夹下:
在这里插入图片描述
nginx解压文件夹目录说明:
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的源代码
注意:Makefileobjs是我们使用源码简单安装时,执行./configure命令之后产生的文件。

4.2 nginx安装文件夹目录

这里为了更清楚的展示nginx安装之后的文件夹目录,我们使用linux中常用的tree工具,可以更好地展示文件目录结构。
首先安装tree工具:yum install -y tree来安装tree工具。
安装后执行命令:tree /usr/local/nginx (tree后面跟的是nginx的安装目录,这里是默认的安装目录),结果如下:
在这里插入图片描述
对nginx安装目录的说明:
conf:nginx所有配置文件目录;
CGI(Common Gateway Interface)通用网关【接口】,主要解决的问题是从客户端发送一个请求和数据,服务端获取到请求和数据后可以调用调用CGI【程序】处理及相应结果给客户端的一种标准规范。
astcgi.conf:fastcgi相关配置文件;
fastcgi.conf.default:fastcgi.conf的备份文件;
fastcgi_params:fastcgi的参数文件;
fastcgi_params.default:fastcgi的参数备份文件;
scgi_params:scgi的参数文件;

scgi_params.default:scgi的参数备份文件;
uwsgi_params:uwsgi的参数文件;
uwsgi_params.default:uwsgi的参数备份文件;
mime.types:记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系;
mime.types.default:mime.types的备份文件;

nginx.conf:这个是Nginx的核心配置文件,这个文件非常重要,也是我们即将要学习的重点;
nginx.conf.default:nginx.conf的备份文件;
koi-utfkoi-winwin-utf这三个文件都是与编码转换映射相关的配置文件,用来将一种编码转换成另一种编码;
html:存放nginx自带的两个静态的html页面;
50x.html:访问失败后的失败页面;

index.html:成功访问的默认首页;
logs:记录入门的文件,当nginx服务器启动后,这里面会有 access.logerror.lognginx.pid三个文件出现。;
sbin:是存放执行程序文件nginx。
nginx是用来控制Nginx的启动和停止等相关的命令。

在linux中使用'命令XXX'可以将 `` 内的内容作为参数向外传递。
注意:符号 ` 是键盘上按键 Esc下面的那个按键!!!
在这里插入图片描述

WINCH会关闭worker进程,不会关闭master进程,而QUIT会关闭worker和master进程。

5. Nginx服务器启停命令

启动Nginx服务的方式只有一种那就是进入到Nginx安装目录/usr/local/nginx/sbin下执行命令:
./nginx才会启动Nginx服务,启动服务之后对服务的控制分为两种方式:

  1. 通过Nginx服务的信号来控制Nginx的关闭,更新等操作;
  2. 通过Nginx服务的命令控制。

5.1 Nginx服务的信号控制

目录 /usr/local/nginx/sbin/ 下的 nginx 是一个可执行的二进制文件。我们使用该文件启动nginx服务。

命令:./nginx:启动Nginx服务。
Nginx的启动

5.1.1 Nginx中的master和worker进程

Nginx的高性能,和它的架构模式有关。Nginx默认采用多进程的方式工作,当Nginx启动以后,通过命令:
ps -ef | grep nginx查看到以下内容:
在这里插入图片描述
上图中有一个master进程和一个worker进程,但实际上Nginx中,master进程只有一个,worker进程可以有多个。

master进程:在Nginx服务中只有1个负责接收管理员的命令和信号,管理worker进程,包含接收外界的信息,并将接收到的信号发送给各个worker进程,监控worker进程的状态,当worker进程出现异常退出后,会自动重新启动新的worker进程;

worker进程:负责处理用户的请求,可以存在多个。各个worker进程之间是相互独立,处理请求的机会也是相等的。

5.1.2 Nginx的工作方式

在这里插入图片描述

我们现在作为管理员,只需要通过给master进程发送信号就可以来控制Nginx。

5.1.3 如何获取Nginx进程的PID

要想操作Nginx的master进程,就需要获取到master进程的进程号ID。获取方式简单介绍两个:
方式1:ps -ef | grep nginx
在这里插入图片描述

方式2:在讲解nginx的 ./configure 的配置参数的时候,有一个参数是 --pid-path=PATH 默认是 /usr/local/nginx/logs/nginx.pid ,所以可以通过查看该文件来获取nginx的master进程ID.
在这里插入图片描述
通过上面2种方式查看到的Nginx的master的PID是一样的。

5.1.4 Nginx中的信号

在这里插入图片描述
我们就是要利用这些信号来控制Nginx。
命令:kill -信号XXX master进程的PID:这里的kill不能简单地理解为杀死或关闭,而是调用Nginx的某个信号完成信号对应的操作。

5.1.4.1 TERM/INT信号

发送TERM/INT信号给master进程,会将Nginx服务立即关闭。
命令:kill -TERM master进程PID
例如使用TERM信号关闭Nginx服务:
在这里插入图片描述
关闭之后,发现Nginx服务的master进程和worker进程确实都被关闭了。

5.1.4.2 QUIT信号

发送QUIT信号给master进程,master进程会控制所有的work进程不再接收新的请求,等所有请求处理完后,在把进程都关闭掉。
命令:kill -QUIT master进程PID
在这里插入图片描述

5.1.4.3 HUP信号

发送HUP信号给master进程,master进程会把控制旧的work进程不再接收新的请求,等处理完请求后将旧的work进程关闭掉,然后根据nginx的配置文件重新启动新的work进程。
命令:kill -HUP master进程PID
在这里插入图片描述
注意:使用HUP信号不会关闭Nginx的master进程!

5.1.4.4 USR1信号

发送USR1信号给master进程,告诉Nginx重新开启日志文件。这里的重新打开是重新生成的意思。
命令:``
比如我们把目录 nginx安装目录 logs/ 下的 access.logerror.log文件都删除后,执行USR1信号之后:
在这里插入图片描述
注意:使用USR1信号不会关闭Nginx的master进程!

5.1.4.5 USR2信号

发送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 master进程PID:执行USR2信号,平滑升级
在这里插入图片描述
执行上述命令之后,在 /usr/local/nginx/logs/ 目录下会出现 nginx.pid.oldbin 文件:
在这里插入图片描述
此时要将旧master进程的PID关闭掉:
kill -QUIT master进程的PID,这里执行的命令是:
在这里插入图片描述
旧master进程的PID已经被关闭了。
USR2信号通常用来对Nginx版本进行升级或者新增模块的时候使用。

5.1.4.6 WINCH信号

发送WINCH信号给master进程,让master进程通知所有的worker进程不再接收新的请求,处理完所有请求后关闭worker进程。
命令:kill -WINCH master进程PID
在这里插入图片描述

注意:使用WINCH信号不会关闭master进程!

5.2 Nginx服务的命令控制

此方式是通过Nginx安装目录下的sbin下的可执行文件nginx来进行Nginx状态的控制,我们可以通过命令来查看都有哪些参数可以用:
进入到Nginx安装目录:/usr/local/nginx/sbin 目录下,执行命令:
./nginx -h
内容如下:
在这里插入图片描述
命令:./nginx -【选项】中的选项释义:
-?-h:显示帮助信息
-v:打印版本号信息并退出
-V:打印版本号信息和配置信息并退出
-t:测试nginx的配置文件语法是否正确并退出
-T:测试nginx的配置文件语法是否正确并列出用到的配置文件信息然后
退出
-q:在配置测试期间禁止显示非错误消息
-s:signal信号,后面可以跟 :

  1. stop:快速关闭,类似于TERM/INT信号的作用,例如./nginx -s stop
  2. quit:优雅的关闭,类似于QUIT信号的作用,例如./nginx -s quit
  3. reopen:重新打开日志文件类似于USR1信号的作用,例如./nginx -s reopen
  4. reload:该命令类似于HUP信号的作用,作用是重新读取并加载配置文件nginx.conf,例如./nginx -s reload

-p:prefix,指定Nginx的prefix路径,(默认为: /usr/local/nginx/)
-c:filename,指定Nginx的配置文件路径,(默认为: conf/nginx.conf)
-g:用来补充Nginx配置文件,向Nginx服务指定启动时应用全局的配置

就经验而言,使用Nginx的命令对Nginx服务进行操作通常是我们在工作中的首选!

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

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

  1. 使用Nginx服务信号控制完成;
  2. 使用Nginx安装目录的make命令完成。

这里使用方案1,以Nginx版本升级为例,介绍如何将Nginx升级到指定版本。
首先查看当前Nginx的版本:
在这里插入图片描述
从图中得知:Nginx的版本为1.22.1,我准备将其升级到1.23.3。
对于当前系统中已经安装的1.22.1版本的Nginx,我们先不管,准备好1.22.3版本的Nginx:
在这里插入图片描述
进入1.22.3版本的压缩包解压之后的文件目录nginx-1.23.3中,执行命令对1.23.3版本进行配置和编译,不需要进行安装:
第一步:

  1. 进入1.23.3的解压目录;

  2. 执行配置命令:./configure
    在这里插入图片描述

  3. 执行编译命令:make
    在这里插入图片描述

第二步:
将旧版本1.22.1的sbin目录下的nginx进行备份:
在这里插入图片描述

第三步:
将1.23.3解压目录中编译后的objs目录下的nginx文件,复制到当前1.23.1版本的Nginx的安装后的目录**/usr/local/nginx/sbin**目录下:
在这里插入图片描述

第四步:
发送USR2信号给1.23.1(旧版本)对应的master进程:
在这里插入图片描述

第五步:
发送QUIT信号给1.23.1(旧版本)的master进程。
在这里插入图片描述

第六步:
此时访问nginx页面,还可以访问,且查看nginx版本:
在这里插入图片描述
发现已经升级到了1.23.3。最后删除第二步中备份的nginx文件:
在这里插入图片描述

到这里,Nginx的版本升级成功完成!

若使用Nginx命令的方式对Nginx进行版本升级:
第一步,第二步,第三步和使用信号控制的方式都相同。
第四步:
进入到1.23.3压缩包解压后的目录nginx-1.23.3目录下,执行命令:
make upgrade
第五步:
查看版本是否更新成功。

其实无论使用哪种方案对Nginx进行版本升级,实际上在整个过程中,Nginx是一直对外提供服务的。并且当Nginx的服务器启动成功后,我们是可以通过浏览器进行直接访问的。

7. Nginx核心配置文件

从前面的内容学习中,我们知道Nginx的核心配置文件默认是放在 /usr/local/nginx/conf/nginx.conf ,本章主要讲述 nginx.conf 的内容和基本配置方法。
在这里插入图片描述

读取Nginx自带的Nginx配置文件,我们将其中的注释部分【学习一个技术点就是在Nginx的配置文件中可以使用 # 来注释】删除掉后,就剩下下面内容:

在这里插入图片描述

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

7.1 全局块

全局块,主要设置Nginx服务器整体运行的配置指令。格式一般为:
指令名 指令值;
比如:worker_processes 1;

7.1.1 user指令

user指令用于配置运行Nginx服务器的worker进程的用户和用户组。注意:这里的用户和用户组指的是Linux系统中的用户和用户组。
在这里插入图片描述
该属性也可以在编译的时候指定,语法如下 ./configure --user=userXXX --group=groupXXX ,如果两个地方都进行了设置,最终生效的是配置文件中的配置。

举例演示如何使用user指令:

  1. 在Linux系统中创建一个用户jack
    useradd jack
    在这里插入图片描述
  2. 在配置文件 nginx.conf 的全局块中添加如下信息:
    在这里插入图片描述
  3. 创建文件 /root/html/index.html ,文件内容如下:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-
serif;
}
</style>
</head>
<body>
<h1>Welcome to 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>Thank you for using nginx.</em></p>
<p><em>I am jack</em></p>
</body>
</html>
  1. 修改 nginx.conf
    在这里插入图片描述
  2. 重启nginx,访问Linux80端口地址,例如我的地址:http://192.168.25.144/出现如下错误:
    在这里插入图片描述
    原因分析:
    在这里插入图片描述
    如上图所示,nginx的master主进程将请求交给worker进程来处理,worker进程发现用户访问index.html 页面,于是就按照 nginx.conf 中的对应的server块中配置的路径查找资源,但是由于worker进程所属用户是 jack ,而 jack 作为普通用户,没有访问 /root/html目录的权限,因此才出现5中的错误!

解决办法:我们只需要将 index.html 文件创建到用户 jack 所在的 /home/jack/html 目录下,然后修改server块中的location配置即可。
在这里插入图片描述

修改location中的配置:
在这里插入图片描述
最后别忘记重新加载配置文件:
在这里插入图片描述

就可以成功看到以下内容:
在这里插入图片描述

7.1.2 worker_processes指令

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

在这里插入图片描述

在这里插入图片描述
查看worker进程:
在这里插入图片描述
发现和配置文件中配置的个数一致!

7.1.3 master_process指令

master process用来指定是否开启工作进程。
在这里插入图片描述
默认的配置文件中没有配置master_process指令,是因为nginx会使用默认配置,我们不配置master_process,它的默认值就是 on:开启。
例如配置master_process的值为 off:关闭:

在这里插入图片描述

重启nginx,会发现只有一个master进程:

在这里插入图片描述
此时,80端口地址也是访问不了的,因为没有worker进程可用于处理请求了!所以master_process通常使用默认配置。

7.1.4 daemon指令

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

在这里插入图片描述

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

7.1.5 pid指令

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

在这里插入图片描述

其实,查看Linux后台nginx进程pid与nginx的存放pid的文件中存放的pid值是相同的:
在这里插入图片描述

该属性还可以通过 ./configure --pid-path=路径XXX 来指定。

7.1.6 error_log指令

error_log指令用来配置Nginx的错误日志存放路径。

在这里插入图片描述
该属性可以通过 ./configure --error-log-path=路径XXX 来指定。

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

7.1.7 include指令

include指令用来引入其他配置文件,使Nginx的配置更加灵活。

在这里插入图片描述

7.2 events块

events块,主要设置,Nginx服务器与用户的网络连接,这一部分对
Nginx服务器的性能影响较大

# event块
events {
	指令名 指令值;
}

7.3 http块

http块,是Nginx服务器配置中的重要部分,代理、缓存、日志记录、第三方模块配置…

# http块
http {
	指令名 指令值;
	#server块,是Nginx配置和虚拟主机相关的内容
	server {
		指令名 指令值;
		#location块,基于Nginx服务器接收请求字符串与location后面的值进行匹配,对特定请求进行处理
		location / {
			指令名 指令值;
		}
	}
	...
}

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

  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值