Nginx常见问题

基于端口的虚拟机:

使用端口来区分,浏览器使用域名或ip地址:端口号 访问。

注意:~ 代表自己输入的英文字母。

16、location正则案例

1 #优先级1,精确匹配,根路径
 2 location =/ {
 3  return 400;
 4 }
 5 #优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
 6 location ^~ /av {
 7  root /data/av/;
 8 }
 9 #优先级3,区分大小写的正则匹配,匹配/media*****路径
10 location ~ /media {
11  alias /data/static/;
12 }
13 #优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里 location ~* .*\.(jpg|gif|png|js|css)$ {
14  root /data/av/;
15 }
16 #优先7,通用匹配
17 location / {
18  return 403;
19 }

View Code

17、Nginx怎么做限流?

Nginx限流就是限制用户请求速度,防止服务器受不了,限流算法有以下3种方法:

    1. 正常限制访问频率(正常流量)。
    1. 突发限制访问频率(突发流量)。
    1. 限制并发连接数。

Nginx的限流都是基于漏桶流算法。

正常限制访问频率(正常流量)

  • 限制一个用户发送的请求,设置Nginx多久接收一个请求。
  • Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率。
1 #定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
2 #绑定限流维度
3 server{
4  location/seckill.html{
5   limit_req zone=zone;
6   proxy_pass http://lj_seckill;
7   }
8 }

View Code

1r/s代表1秒一个请求,1r/m一分钟接收一个请求, 如果Nginx这时还有别人的请求没有处理完,Nginx就会拒绝处理该用户请求。

突发限制访问频率(突发流量)

  • 限制一个用户发送的请求,设置Nginx多久接收一个。
  • 上面的配置一定程度可以限制访问频率,但是也存在着一个问题:如果突发流量超出请求被拒绝处理,无法处理活动时候的突发流量,这时候应该如何进一步处理呢?Nginx提供burst参数结合nodelay参数可以解决流量突发的问题,可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数。
1 #定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉 limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
2 #绑定限流维度
3 server{
4  location/seckill.html{
5   limit_req zone=zone burst=5 nodelay;
6   proxy_pass http://lj_seckill;
7   }
8 }

View Code

这里多了一个 burst=5 nodelay; 多了这个可以代表Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢来落,没有其他用户的请求我就处理你的,有其他的请求的话Nginx就漏掉不接受你的请求。

限制并发连接数

Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置。一个简单的例子如下:

1 http {
 2  limit_conn_zone $binary_remote_addr zone=myip:10m;
 3  limit_conn_zone $server_name zone=myServerName:10m;
 4 }
 5 server {
 6  location / {
 7   limit_conn myip 10;
 8   limit_conn myServerName 100;
 9   rewrite / http://www.lijie.net permanent;
10  }
11 }

View Code

上面配置了单个IP同时并发连接数最多只能10个连接,并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然,只有当请求的header被服务器处理后,虚拟服务器的连接数才会计数。刚才有提到过Nginx是基于漏桶算法原理实现的,实际上限流一般都是基于漏桶算法和令牌桶算法实现的。

18、漏桶流算法和令牌桶算法?

漏桶算法

漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。

令牌桶算法

令牌桶算法是网络流量整形和速率限制中最常使用的一种算法。典型情况下,令牌桶算法用来控制发送到网络上的数据的数目,并允许突发数据的发送。Google开源项目Guava中的RateLimiter使用的就是令牌桶控制算法。令牌桶算法的机制如下:存在一个大小固定的令牌桶,会以恒定的速率源源不断产生令牌。如果令牌消耗速率小于生产令牌的速度,令牌就会一直产生直至装满整个令牌桶。

19、为什么要做动静分离

  • Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
  • 让静态的资源只走静态资源服务器,动态的走动态的服务器。
  • Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
  • 对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。若用户请求的动态文件,比如servlet、jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

20、Nginx怎么做动静分离?

只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:

1 location /image/ {
2  root /usr/local/static/;
3  autoindex on;
4 }

View Code

21、Nginx负载均衡算法的实现以及策略?

为了避免服务器崩溃,大家会通过负载均衡的方式来分担服务器压力。将对台服务器组成一个集群,当用户访问时,先访问到一个转发服务器,再由转发服务器将访问分发到压力更小的服务器。Nginx负载均衡实现的策略有以下五种:

轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。

1 upstream backserver {
2  server 192.168.0.12;
3  server 192.168.0.13;
4 }

View Code

权重weight

weight的值越大分配到的访问概率越高,主要用于后端每台服务器性能不均衡的情况下。其次是为在主从的情况下设置不同的权值,达到合理有效的地利用主机资源。

1 upstream backserver {
2  server 192.168.0.12 weight=2;
3  server 192.168.0.13 weight=8;
4 }

View Code

权重越高,在被访问的概率越大,如上例,分别是20%、80%。

ip_hash(IP绑定)

每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器, 并且可以有效解决动态网页存在的session共享问题。

fair(第三方插件)

  • 必须安装upstream_fair模块。
  • 对比 weight、ip_hash更加智能的负载均衡算法,fair算法可以根据页面大小和加载时间长短智能地进行负载均衡,响应时间短的优先分配。

哪个服务器的响应速度快,就将请求分配到那个服务器上。

url_hash(第三方插件)

Original: https://www.cnblogs.com/taojietaoge/p/15271585.html
Author: 涛姐涛哥
Title: Nginx常见问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611987/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • [javaweb]重点总结大全

    javaweb web:网页静态web:html,css 数据不会发生变化动态web:servlet/jsp,asp,php每个人在不同的时间看到数据都不同 web应用程序编写完毕…

    数据库 2023年6月16日
    069
  • 运行jar包使用外部依赖

    nohup java -Dloader.path=”lib/” -Dfile.encoding=utf-8 -jar test.jar > test….

    数据库 2023年6月9日
    051
  • 从源码分析 XtraBackup 的备份原理

    MySQL物理备份工具,常用的有两个:MySQL Enterprise Backup 和 XtraBackup。 前者常用于MySQL企业版,后者常用于MySQL社区版、Perco…

    数据库 2023年6月11日
    0110
  • Mongodb使用总结

    Mongodb使用总结 基于内存操作,便于与网站交互 数据库-集合-文档(存储多种数据类型),我们的操作都是基于单文档进行操作,并且通过冗余字段进行操作 嵌入式数组文档减少了对昂贵…

    数据库 2023年6月11日
    076
  • jdbc-实现用户登录业务(存在sql注入)

    package com.cqust; import java.sql.Connection;import java.sql.DriverManager;import java.sq…

    数据库 2023年5月24日
    068
  • Java编程作业

    1、编程题 设计一个用户类User,类中的变量有用户名、密码和记录用户数量的变量,定义3个构造方法:无参的、为用户名赋值的、为用户名和密码赋值的,还有获取和设置密码的方法和返回类信…

    数据库 2023年6月11日
    073
  • 《SpringBoot官网文档:2.1.5》

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月14日
    075
  • ajax与thymeleaf分别实现数据传输

    小杰笔记篇: 1:第一种:利用Model和thymeleaf引擎来完成: Controller层: html:引入引擎 第二种方式:ajax: 第一步:创建User实体类假装数据库…

    数据库 2023年6月6日
    078
  • 一文读懂Spring框架中依赖注入流程

    想读懂Spring的依赖注入流程,我们先简单了解一下Ioc和DI是什么? IoC和DI Ioc—Inversion of Control,即”控制反转”,不…

    数据库 2023年6月6日
    066
  • Qt 圆角头像的实现

    在QT 中设置圆形头像,本文记录了两个解决思路。 将头像显示在QLabel 此类控件中,设置QLabel 为一个正方形,接着设置QLabel 的圆角属性,可以实现圆形头像的效果。 …

    数据库 2023年6月16日
    095
  • 项目管理构建工具——Maven(基础篇)

    项目管理构建工具——Maven(基础篇) 在前面的内容中我们学习了JDBC并且接触到了jar包概念 在后面我们的实际开发中会接触到很多jar包,jar包的导入需要到互联网上进行就会…

    数据库 2023年6月14日
    071
  • 解决.net6 Docker容器 DateTime.Now 获取时间相差8小时问题(转载)

    .net6项目中使用DateTime.Now获取到的时间比本地时间要差8小时,但是docker容器中,使用date获取的时间是正确的,网上提供了很多种方法,主要有以下三种方法,其中…

    数据库 2023年6月9日
    0130
  • [LeetCode]35. 搜索插入位置

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3…

    数据库 2023年6月9日
    077
  • Windows安装mysql数据库

    一般我安装mysql用以下两个方法: 一.phpstudy环境下的mysql安装 只需将mysql的bin目录配置到系统环境变量即可, 输入默认密码root即可登录 二.本地直接安…

    数据库 2023年5月24日
    071
  • 计算机操作系统(慕课版)思维导图

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月16日
    084
  • [springmvc]拦截器功能

    11.拦截器 只会拦截controller的请求,对于静态资源不处理 被spring代理的拦截器实现只需要两步: 1.实现一个拦截器类 package com.spring.con…

    数据库 2023年6月16日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球