Nginx 学习笔记总结(二)

本文详细介绍了Nginx的配置和使用,包括项目级别划分、单体架构的优缺点、集群的实现与优势,重点讲解了Nginx的进程模型、反向代理、日志管理、静态资源服务及Gzip压缩。同时,解析了Nginx配置文件的结构和指令,提供了错误日志处理方法、命令详解以及日志分割策略。此外,讨论了location匹配规则、DNS解析和跨域支持的解决方案,是全面了解和掌握Nginx运维的实用教程。
摘要由CSDN通过智能技术生成

1. 项目级别划分


在这里插入图片描述

2. 单体架构


单体架构的优点:

  • 小团队成型即可完成开发-测试-上线。
  • 迭代周期短,速度快。
  • 打包方便,运维省事。

单体架构的缺点:

  • 单节点宕机造成所有服务不可用。(可以通过集群解决,实现高并发性和高可用性。)
  • 耦合度太高(迭代,测试,部署)。(可以通过分布式,微服务)
  • 单节点并发能力有限。(可以通过负载均衡等方式来解决,实现高并发。)

3. 集群


集群和分布式一定搞清楚。

  • 如果多服务器共同的实现一个业务,这就可以称之为集群。
  • 如果多个计算机节点运行的业务不同,这就可以称之为分布式。

集群的优势:

  • 提高系统性能。
  • 提高系统可用性。
  • 可扩展性高(当用户访问量变多变少,我们可以增加减少计算机节点)。

集群的注意点:

  • 集群的用户会话。
  • 集群中的业务都是定时任务。
  • 集群搭建必须内网互通。

5. Nginx详细介绍


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


常见的几种服务器:
在这里插入图片描述

6. 反向代理之路由


通过不同的url路由来确定去哪台服务器上运行,一般静态资源的文件也都会有一个专门的路由匹配。
在这里插入图片描述

7. Nginx安装后的 目录结构详解

7.1 html目录


html目录:
在这里插入图片描述
在这里插入图片描述

7.2 sbin目录


sbin目录存放对nginx执行关闭重新加载等操作的命令。

在这里插入图片描述

7.3 conf目录


conf目录就是用来存放配置配置文件的。nginx.conf文件是我们的主要进行配置文件的。
在这里插入图片描述

8. Nginx的进程模型

8.1 Nginx的进程


nginx进程有两个:

  • matster process只有一个,master进程是负责管理"worker"进程的,除了管理worker进程,master进程还负责读取配置文件、判断配置文件语法的工作。
  • worker process默认只有一个,可以配置多个。worker进程负责接受处理请求,就是为master进程服务的。
    在这里插入图片描述

8.2 worker进程


在nginx.conf配置文件可以对worker进程数量进行修改。
在这里插入图片描述


./nginx -t 命令:来检测我们的配置nginx.conf配置文件是Ok的!
在这里插入图片描述
没问题就是ok,有问题就报错。


在这里插入图片描述

8.3 master进程


master进程会对每一个worker进程进行监控。当worker进程发生了异常退出了,那么master进程会立刻创建一个新的worker进程出来。

master进程可以给worker进程发送一些信号,例如我们执行nginx的退出重新加载等等命令时,master会向worker发送退出重新加载等信号。

在这里插入图片描述


当我们的master发给worker关闭指令,worker是先将自己内部的请求处理完成之后在进行关闭!

9. Nginx处理Web请求机制

9.1 worker抢占机制


Nginx支持着一个处理的并发数可以达到几十万甚至几百万。

为什么Nginx会有这样的效果?

在这里插入图片描述

9.2 Nginx 事件处理


传统服务器事件处理:
在这里插入图片描述


nginx事件处理:

  • 当客户请求发生阻塞,worker会先处理其他请求。这样worker就不会跟着客户请求阻塞而阻塞了。
    在这里插入图片描述

9.3 Nginx 设置并发数


我们可以限制nginx的最大连接数,也就是并发数。

nginx的并发数是可以设置的,设置大小要根据硬件和用户请求数总和判断,如果配置的太高硬件cpu可能承受不住;如果设置太小用户请求比较多的话么,就会让客户端卡顿。

在nginx.conf文件中的events中可以配置最大连接数和事件模式。
在这里插入图片描述

10. nginx.conf 配置文件的 配置结构


nginx.conf的配置结构很清晰的,就像下图一样,main代表的是整个nginx.conf文件(相当于一个容器的效果)。

  • 直接在main中配置的叫做全局变量。
  • 之后就是event模块和http模块。
    在这里插入图片描述

nginx.conf的指令:

  • 而下面的像server{ … }中的{ }叫做指令块。
    在这里插入图片描述

我们要记住但凡无论在代码和配置中,碰到$开头的一般都是内置参数。
在这里插入图片描述

location定义的路由我们可以直接访问。
在这里插入图片描述

11. nginx.conf 配置文件的 详细解释

11.1 nginx.conf详细解释


user nobody;

  • 配置worker进程,以什么用户的权限来操作。
    在这里插入图片描述
    可以通过ps查看一下nginx的进程,master是以root用户权限来操作;而worker是以nobody用户权限来操作。
    在这里插入图片描述
    在这里插入图片描述

worker_processes 2;

  • 配置多少个worker进程,一般最好的效果就是我们cpu有几个就配置几个(前提是服务器上面没啥东西运行)。

error_log logs/error.log debug;

  • 配置错误日志路径和级别。
    在这里插入图片描述

pid logs/nginx.pid;

  • pid就是进程id(master进程的id)和它存放的位置。
    在这里插入图片描述

events{…}指令块

  • 配置工作模式和最大连接数量(并发量)。
    在这里插入图片描述

http{…}指令块

  • http模块的相关配置。

见下节。

11.2 nginx.conf的http模块

这一节全是http模块的指令。


include mime.types;

  • include导入外部文件,mime.types包含需要参数类型,很重要!
    在这里插入图片描述
    在这里插入图片描述

log_format main ‘xxx’; 和 access_log logs/access.log main;
在这里插入图片描述
对于log_format的一些$内置属性,内容可以自行百度一下。


sendfile on; 和 tcp_nopush on;

  • sendfile on发送文件,默认是打开的。
  • tcp_nopush on默认是关闭的。tcp_nopush 配置和 tcp_nodelay “互斥”,tcp_nopush可以配置一次发送数据的包大小。也就是说,它不是按时间累计 0.2 秒后发送包,而是当包累计到一定大小后就发送。
  • sendfile on和tcp_nopush on是搭配使用的,只有先开启了sendfile才能开启tcp_nopush。

在这里插入图片描述


keepalive_timeout 65;

  • 客户端和nginx服务器的超时时间。
    在这里插入图片描述

gzip on;

  • 打开gzip压缩,这样会将html,js等文件进行压缩,从而让文件体积变小自然效率就变高了。
  • 但是,同样既然是压缩,那么nginx服务器cpu也肯定有压力的。
    在这里插入图片描述

server{…}

  • server就代表一个虚拟服务器!!!server可以设置多个,根据server_name不同的域名访问不同的server虚拟服务器。
  • listen 80; 当前server监听端口号。
  • server_name localhost; 为虚拟服务器的设别路径,一般我们设置成自己的域名,域名格式也有很多例如:www.itholms.*,~.*itholms.com等。
  • location / {} 来映射url的。
  • error_page 500 502 503 504 /50x.html;当发生错误的时候,就会显示50x.html页面。

在这里插入图片描述

server虚拟服务器是可以创建多个的。
在这里插入图片描述
平时,我们可以直接定义到nginx.conf配置文件,也可以配置一个外部conf文件,然后include导入到nginx.conf文件中。

12. nginx.pid文件打开失败和失效的解决办法


问题一:目录不存在,导致无法读取nginx.pid文件。
在这里插入图片描述

问题二:nginx.pid文件失效了。
在这里插入图片描述


对于nginx的一些命令参数,我们可以通过-h来查看相关参数的信。
在这里插入图片描述

13. nginx常用的命令详解


nginx常用的命令:

  • ./nginx -s stop 命令:这种方式对于用户的请求是不友好的,一旦执行这种命令,用户的所有请求全部终止。
  • ./niginx -s quit 命令:这种方式是等待请求处理完成后,再关闭nginx服务。
  • ./nginx -s reload 命令:重新加载nginx配置文件。
  • ./nginx -t 命令:检测nginx.conf的配置文件的的格式是否正确,正确返回ok,不正确就会报错。
  • ./nginx -v 命令:显示当前nginx的版本。
  • ./nginx -V 命令:非常详细的显示当前nginx的版本和一些附带环境当时的配置信息等等。
  • ./nginx -h 或 -? 命令:显示nginx的所有参数信息,如果忘记了就可以使用他们两个来查看。
  • ./nginx -c /目录/nginx.conf 命令:指定核心配置文件来运行nginx服务。

14. Nginx日志分割

14.1 手动切割日志


nginx的日志一般就只有两个:
在这里插入图片描述


随着时间的推移,我们的日志肯定越来越多这样我们查看日志就非常不方便,所以就有了分割日志。

第一种方式:手动切割日志,创建.sh的shell脚本文件。这种脚本文件一般我们创建在sbin目录下,也方便我们一起执行nginx的相关命令。

下图就是就是一个相关shell文件中的信息,其实就是全局配置 + 执行的命令就可以了。
在这里插入图片描述

#!/bin/bash
LOG_PATH="/usr/local/nginx/logs/"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d+%H:%M)
PID=/usr/local/nginx/logs/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
# 向Nginx主进程发送信号,用于重新打开日志文件。
kill -USR1 `cat $PID`
# 注意上面命令不要有多余的空格,不然会报错!

需要注意的是linux的一些.sh文件必须要权限才能去修改相关的文件。因此我们还需要执行chomd +x命令给文件添加权限。

在这里插入图片描述

14.2 定时切割日志


第二种方式:使用定时任务来定时切割日志。其实定时切割日志就是在手动切割日志的.sh文件中,定时的去执行.sh文件的命令。


第一步:安装定时任务:执行apt-get install crontabs命令。(一般系统都自带。)

第二步:使用crontab -l 来查看定时任务的列表。再使用crontab -e 来添加一个定时任务。

# 格式相关,去菜鸟教程查看。
*/1 * * * * /usr/local/nginx/sbin/cut_log.sh

在这里插入图片描述
(cron定时很常用,每天给数据库备份定时也可以通过这种方式,每天定时来备份。)

第三步:重启定时任务,具体命令如下:
在这里插入图片描述
在这里插入图片描述

15. 使用nginx为静态资源提供服务


既然是为静态资源提供服务,必然需要创建一个虚拟主机server。

我们可以在外部的创建一个conf文件,之后在导入nginx.conf的http模块。

例如:创建了一个static.conf文件,而我们的静态文件存储到/opt/static目录下,就可以定义下方的location映射路径。
在这里插入图片描述

注意:在同一个server中,location的映射路径是不能相同的,不然虚拟主机就混乱了。

还有一点就是注意location中映射的路径前面是否有斜杠,有斜杆代表绝对路径,没有斜杠代表相对路径。


我们也可以设置一种别名的效果,就是location中的alias指令来实现。

在这里插入图片描述

16. Gzip压缩提升效率


提升效率就是nginx.conf文件中的http模块下的gzip on指令。

如果开启对应gzip相关的设置如下:

  • gzip on;指令:开启gzip压缩功能,目的:提高传输效率,节约带宽。
  • gzip_min_length 1;指令:限制最小压缩,这里小于1字节的文件就不会被压缩了。
  • gzip_comp_level 3;指令:定义压缩的级别(也就是压缩比,文件越大,压缩越多,但是cpu使用会越多。)
  • gzip_types text/plain application/x-javascript text/css text/html application/xml; 指令:定义压缩文件的类型(这里只是提示了部分)。

在这里插入图片描述

17. location的匹配规则解析

17.1 精准匹配


location精准匹配:

  • =开头表示精准匹配。

我们使用=号就能做到精准匹配的效果。
在这里插入图片描述

17.2 location的正则表达式


location正则表达式:

  • =:表示精确匹配。
  • ~:表示区分大小写的正则表达式。
  • ~*:表示不区分大小写。
  • ^~: 表示以某个字符路径开头请求。例如:指定的路径是/opt/static/img,那么只能访问/opt/static/img下的内容。

例如:下面是~*的演示:

server {
    listen       89;
    server_name  localhost;

    # 正则表达式。* 代表不区分大小写。
    # 这里的意思是所有匹配结尾相同的都在/opt/static下面查找。
    location ~* \.(GIF|png|bmp|jpg|jpeg) {
        root   /opt/static;
    }
}

这样我们随便访问一张图片,就可以在/opt/static中查找。
在这里插入图片描述


例如:下面是^~的演示:

server {
    listen       89;
    server_name  localhost;
    # ^~ 以某个字符路径开头请求。这里的意思是只能匹配/opt/static/img下的内容。
    location ^~ /static/img {
        root   /opt;
    }
}

在这里插入图片描述

18. DNS解析域名


对于一些域名ip,我们想看他的ip可以通过ping来查看到。
在这里插入图片描述


如果我们想看自己的外网ip地址,可以直接百度ip来查看到。
在这里插入图片描述


DNS域名解析的流程:
在这里插入图片描述
在这里插入图片描述


平时我们在本地也有域名映射效果,就是我们常见的localhost。

对于一些ip我们可以通过一些特殊工具来映射域名效果。

SwitchHosts软件:
在这里插入图片描述

19. 解决Nginx的跨域支持问题


在这里插入图片描述


CORS(Cross-Origin Resource Sharing):跨域资源共享。

允许浏览器向跨Origin的服务器发起js请求获取响应。

有一下几种形式来获取跨域的数据:

  • 前端ajax可以以jsonp的形式去获取数据。

  • 对于springboot服务器,通过spring boot cross 去进行一个配置,来达到服务器的一个跨域支持。
    在这里插入图片描述

  • 对于nginx想要实现跨域支持,就需要配置虚拟主机中的一些内容。完成下面配置当别人的域名或服务器来访问我们的数据时,就可以访问了。

server {
    listen       89;
    server_name  localhost;
    
    # 允许跨域请求的域,*代表所有。
    add_header 'Access-Control-Allow-Origin' *;
    # 允许带上cookie请求
    add_header 'Access-Control-Allow-Credentials' 'true';
    # 允许请求的方法,比如:get,post,put,delete
    add_header 'Access-Control-Allow-Methods' *;
    # 允许请求的header请求头
    add_header 'Access-Control-Allow-Headers' *;

    location ^~ /static/img {
        root   /opt;
    }
}

在这里插入图片描述

请求头中的 Origin 和 Referer 来表示请求链接的来源。所有跨域请求(CORS)都会添加Origin请求头。

  • Origin 指示了请求来自于哪个站点,只有服务器名,不包含路径信息,浏览器自动添加到http请求 Header 中,无需手动设置。
  • Referer 指示了请求来自于哪个具体页面,包含服务器名和路径的详细URL,浏览器自动添加到http请求 Header 中,无需手动设置。
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值