nginx之使用与配置教程

目录

简介

优点

安装

目录结构

nginx.conf配置文件结构

server虚拟主机配置

listen

server_name

location

root

index

try_files

proxy_pass

使用

反向代理

配置语法

常用指令

proxy_pass

proxy_set_header

proxy_redirect

负载均衡

负载均衡策略

轮询(默认策略)

加权轮询

iphash

动静分离

服务器限流

正常限制访问频率

突发限制访问频率

限制并发服务数

缓存集成

proxy_cache_path

proxy_cache

算法

漏桶算法

令牌桶算法


简介

        nginx是一个高性能的http和反向代理的web服务器

正向代理

反向代理

优点

速度更快、并发更高:单次请求或者高并发请求的环境下,Nginx都会比其他Web服务器响应的速度更快

配置简单,扩展性强:由很多模块组成,这些模块的使用可以通过配置文件的配置来添加

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

热部署:可以在Nginx不停止的情况下,对Nginx进行文件升级、更新配置和更换日志文件等功能

成本低:开源

安装

Nginx的官方网站为: nginx news

nginx有多种安装方式,本文章基于nginx的源码简单安装,其他安装方式不进行介绍。

1.进入官网查找下载版本链接地址

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

2.解压缩

tar -xzf nginx-1.16.1.tar.gz

3.进入资源文件中,寻找configure

./configure

4.编译

make

5.安装

make install

6.启停命令

进入nginx的安装目录:

cd /sbin

启动:

./nginx

停止:

./nginx -s stop

7.访问

ip+端口

看到这个画面说明启动正常

目录结构

[root@localhost ~]# tree /usr/local/nginx
/usr/local/nginx
├── client_body_temp
├── conf                             # Nginx所有配置文件的目录
│   ├── fastcgi.conf                 # fastcgi相关参数的配置文件
│   ├── fastcgi.conf.default         # fastcgi.conf的原始备份文件
│   ├── fastcgi_params               # fastcgi的参数文件
│   ├── fastcgi_params.default       
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types                   # 媒体类型
│   ├── mime.types.default
│   ├── nginx.conf                   # Nginx主配置文件
│   ├── nginx.conf.default
│   ├── scgi_params                  # scgi相关参数文件
│   ├── scgi_params.default           #default结尾的都是备份文件
│   ├── uwsgi_params                 # uwsgi相关参数文件
│   ├── uwsgi_params.default
│   └── win-utf
├── fastcgi_temp                     # fastcgi临时数据目录
├── html                             # Nginx默认站点目录
│   ├── 50x.html                     # 错误页面优雅替代显示文件,例如当出现502错误时会调用此页面
│   └── index.html                   # 默认的首页文件
├── logs                             # Nginx日志目录
│   ├── access.log                   # 访问日志文件
│   ├── error.log                    # 错误日志文件
│   └── nginx.pid                    # pid文件,Nginx进程启动后,会把所有进程的ID号写到此文件
├── proxy_temp                       # 临时目录
├── sbin                             # Nginx命令目录
│   └── nginx                        # 这是'nginx命令的目录'如Nginx的启动命令
├── scgi_temp                        # 临时目录
└── uwsgi_temp                       # 临时目录
————————————————

nginx.conf配置文件结构

...              #全局块

events {         #events块
   ...
}

http      #http块
{
    ...   #http全局块
    server        #server块
    {
        ...       #server全局块
        location [PATTERN]   #location块
        {
            ...
        }
    }
}

1.全局块:从配置文件开始到events块之间的内容,主要会设置一些影响Nginx服务器整体运行的配置指令

2.events块:配置影响nginx服务器或与用户的网络连接

3.http块:可以嵌套多个server,配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置

4.server块:配置虚拟主机的相关参数,一个http中可以有多个server

5.location块:配置请求的路由,以及各种页面的处理情况

server虚拟主机配置

 server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

listen

用于配置网络监听

listen *:80 | *:8080 #监听所有80端口和8080端口
listen  IP_address:port   #监听指定的地址和端口号
listen  IP_address     #监听指定ip地址所有端口
listen port     #监听该端口的所有IP连接

server_name

用于虚拟主机的配置

1.基于域名的虚拟主机,通过域名来区分虚拟主机

需要建立/data/www目录,对应域名网站目录下新增index.html文件;

#当客户端访问www.lijie.com,监听端口号为80,直接跳转到data/www目录下文件
    server {
        listen       80;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

格式:

server_name  name......;

对于name 来说,可以只有一个名称,也可以有多个名称,中间用空格隔开;可以使用通配符“*”

2.基于端口的虚拟主机,通过端口来区分虚拟主机

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

#当客户端访问www.lijie.com,监听端口号为8080,直接跳转到data/www目录下文件
     server {
        listen       8080;
        server_name  www.lijie.com;
        location / {
            root   data/www;
            index  index.html index.htm;
        }
    }

3.基于 IP 地址的虚拟主机配置

语法结构和基于域名匹配一样,而且不需要考虑通配符和正则表达式的问题。

server_name  192.168.1.1

location

location指令的作用是根据用户请求的URI来执行不同的应用,也就是根据用户请求的网站URL进行匹配,匹配成功即进行相关的操作

 location [ = | ~ | ~* | ^~] uri {
 
 }

1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继续向下搜索并立即处理该请求。

2、~:用于表示 uri 包含正则表达式,并且区分大小写。

3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。

4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的 location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹配

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

root

文件存放地址

index

该指令用于设置网站的默认首页。

try_files

try_files 会到硬盘里尝试找这个文件。如果存在名为 /$root/example(其中 $root 是server快定义的)的文件,就直接把这个文件的内容发送给用户

proxy_pass

用于设置被代理服务器的地址

使用

反向代理

客户端发送请求到反向代理服务器,然后反向代理服务器将请求转发到后端的真实服务器上,并将响应返回给客户端。简单理解为用户直接访问反向代理服务器就可以获得目标服务器的资源。这一过程叫反向代理

配置语法

Nginx反向代理模块的指令是由ngx_http_proxy_module模块进行解析,该模块在安装Nginx的时候已经自己加装到Nginx中

常用指令
proxy_pass

该指令用来设置被代理服务器地址,可以是主机名称、IP地址加端口号形式

server {
    listen 80;
    server_name localhost;
    location /server{

        #proxy_pass http://192.168.200.146;
        proxy_pass http://192.168.200.146/;
    }
}

当客户端访问 http://localhost/server/index.html
第一个proxy_pass就变成了http://localhost/server/index.html
第二个proxy_pass就变成了http://localhost/index.html

proxy_set_header

更改Nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发送给代理的服务器

server {
        listen  8080;
        server_name localhost;
        location /server {
                proxy_pass http://192.168.200.146:8080/;
                proxy_set_header username TOM;
        }
    }

proxy_redirect

用来重置头信息中的"Location"和"Refresh"的值。

server {
    listen  8081;
    server_name localhost;
    location / {
        proxy_pass http://192.168.200.146:8081/;
        proxy_redirect http://192.168.200.146 http://192.168.200.133;
    }
}

负载均衡

将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性

http {
    upstream my_upstream {
        server server1.example.com;
        server server2.example.com;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://my_upstream;
        }
    }
}

负载均衡策略

轮询(默认策略)

可以理解为各个服务器权重都为1,每个请求会按时间顺序逐个被分配到不同的后端服务器:

    upstream backend {
        server localhost:9001;
        server localhost:9002;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

加权轮询

weight=number:用来设置服务器的权重,默认为1,权重数字越大,被分配到请求的几率越大

   upstream backend {
        server localhost:9001 weight=10;
        server localhost:9002 weight=5;
        server localhost:9003 weight=3;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

iphash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上:

   upstream backend {
        ip_hash;
        server localhost:9001;
        server localhost:9002;
        server localhost:9003;
    }
    server {
        listen 8080;
        server_name localhost;
        location / {
            proxy_pass http://backend/;
        }
    }

动静分离

初衷是为了访问速度。像大图片、视频、CSS 这种静态资源,如果都放在同一个服务器,在请求的时候就会造成带宽压力,如果把这些静态资源分散到不同的服务器,配合CDN,就可以减少服务器的压力。

在配置文件里咱们创建三个 location 模块,分别路由图片,html、反响代理后端请求。达到将静态资源(图片和html资源)和动态资源(后端服务的请求)分离的目的:

    # ######## 动静分离开始 ########
    # 匹配图片
    location ~ .*\.(gif|jpg|pdf|jpeg|png)$ {
        expires    8h;
        root   /nginx/data/image;
    }
 
    # 匹配html文件
    location ~ .*\.(html)$ {
        root   /nginx/data/html;
    }
 
    # 拦截后台请求,正则匹配 api 路径
    location ~* ^/(lb) {
       # 配置代理地址
       proxy_pass http://myserver;
    }
    # ######## 动静分离结束 ########

服务器限流

nginx限流就是限制用户的请求速度,防止服务器受不了;有三种限流方式:

正常限制访问频率

限制一个用户发送的请求,Nginx多久接收一个请求。
Nginx中使用ngx_http_limit_req_module模块来限制的访问频率,限制的原理实质是基于漏桶算法原理来实现的

#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
    #绑定限流维度
    server{
        location /seckill.html{
            limit_req zone=zone;    
            proxy_pass http://lj_seckill;
        }
  }

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

突发限制访问频率

限制一个用户发送的请求,Nginx多久接收一个;处理活动时候的突发流量时,可以设置能处理的超过设置的请求数外能额外处理的请求数

#定义限流维度,一个用户一分钟一个请求进来,多余的全部漏掉
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/m;
 
    #绑定限流维度
    server{
        location/seckill.html{
            limit_req zone=zone burst=5 nodelay;
            proxy_pass http://lj_seckill;
        }
    }

增加:burst=5 nodelay,表示Nginx对于一个用户的请求会立即处理前五个,多余的就慢慢回落,没有其他用户的请求就立即处理,有其他的请求的话Nginx就漏掉不接受请求。

限制并发服务数

Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能,可以使用limit_conn_zone指令以及limit_conn执行进行配置

http {
        limit_conn_zone $binary_remote_addr zone=myip:10m;
        limit_conn_zone $server_name zone=myServerName:10m;
    }
    server {
        location / {
            limit_conn myip 10;
            limit_conn myServerName 100;
            rewrite / http://www.lijie.net permanent;
        }
    }

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

缓存集成

proxy_cache_path

        缓存就是数据交换的缓冲区,当用户要获取数据的时候,会先从缓存中去查询获取数据,如果缓存中有就会直接返回给用户,如果缓存中没有,则会发请求从服务器重新查询数据,将数据返回给用户的同时将数据放入缓存,下次用户就会直接从缓存中获取数据。

http{
    proxy_cache_path /usr/local/proxy_cache keys_zone=itcast:200m  levels=1:2:1 inactive=1d max_size=20g;
}

1.path:缓存路径地址:/usr/local/proxy_cache

2.keys_zone:用来为这个缓存区设置名称和指定大小

keys_zone=itcast:200m  缓存区的名称是itcast,大小为200M,1M大概能存储8000个keys

3.levels:指定该缓存空间对应的目录,最多可以设置3层,每层取值为1|2

levels=1:2   缓存空间有两层目录,第一次是1个字母,第二次是2个字母
举例说明:
itheima[key]通过MD5加密以后的值为 43c8233266edce38c2c9af0694e2107d
levels=1:2   最终的存储路径为/usr/local/proxy_cache/d/07
levels=2:1:2 最终的存储路径为/usr/local/proxy_cache/7d/0/21
levels=2:2:2 最终的存储路径为??/usr/local/proxy_cache/7d/10/e2

4.inactive:指定缓存的数据多次时间未被访问就将被删除

inactive=1d   缓存数据在1天内没有被访问就会被删除

5.max_size:设置最大缓存空间,如果缓存空间存满,默认会覆盖缓存时间最长的资源

max_size=20g

proxy_cache

该指令用来开启或关闭代理缓存,如果是开启则自定使用哪个缓存区来进行缓存

zone_name:指定使用缓存区的名称 

算法

漏桶算法

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

令牌桶算法

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛选题 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

【学习笔记】[EGOI2023] Bikes vs Cars

题目链接 警惕出题人为了不让你看出来构造是生成树而用了 2023 2023 2023这个数字&#x1f605; 下文中宽度为 w w w的边表示分配给自行车的宽度。 考虑如何判定无解。如果存在 i , j , k i,j,k i,j,k使得 b i , j < min ⁡ ( b i , k , b k , j ) b_{i,j}<\min(b_{i,…

可以非常明显地感受到,一场有关直播带货的暗流正在涌动

虽然有关直播带货的争论依然还在持续&#xff0c;但是&#xff0c;我们依然无法否认今年的双十一依然是直播带货的高光时刻。无论是以淘宝、京东和拼多多为代表的传统电商平台&#xff0c;还是以抖音、快手为代表的新电商平台&#xff0c;几乎都将今年双十一的重心放在了直播带…

Java入门篇 之 继承

本篇碎碎念&#xff1a;最近的课程遇到瓶颈了&#xff0c;看的时候感觉自己会了&#xff0c;但是结束仔细一回顾还是一知半解&#xff0c;一点一点来吧&#xff0c;基础必须要打好(自己给自己好的心里暗示&#xff0c;结局一定是好的) 今日份励志文案:慢慢改变&#xff0c;慢慢…

SELF-AUGMENTED MULTI-MODAL FEATURE EMBEDDING

two embeddings f o r g _{org} org​ and f a u g _{aug} aug​ are combined using a gating mechanism 作者未提供代码

实战Leetcode(五)

Practice makes perfect&#xff01; 实战一&#xff1a; 思路&#xff1a;我们要用复制的节点来组成一个新的链表&#xff0c;而原链表的节点随机指向其中一个节点&#xff0c;我们首先给每一个节点都复制并且插入到原来节点的后面&#xff0c;然后用复制的节点指向我们原来节…

金财数科无代码开发平台:轻松实现电商、CRM、广告推广系统的集成连接

连接与集成&#xff1a;挖掘电商平台的潜力 金财数科是一家领先的信息技术公司&#xff0c;专注于利用前沿技术如互联网、人工智能、大数据和区块链等&#xff0c;为传统财税信息化方案和产品提供升级改造&#xff0c;并打造新一代智能财税SaaS平台。我们的目标是帮助企业通过…

电脑篇——本地串口转TCP,TCP转虚拟串口,网络调试助手,串口调试助手

TCP/UDP工具、串口工具 https://pan.baidu.com/s/1SY03d_RRVhyOZfsPlApmxg?pwd5555 今日有个需求&#xff0c;就是在本机电脑上接了一个串口设备&#xff0c;然后我的QtCreator是在内网远程电脑运行的&#xff0c;我想将串口设备“挂载”到远程电脑上去调试程序&#xff0c;于…

百望云携手华为发布金融信创与数电乐企联合方案 创新金融合规变革

10月27日&#xff0c;北京发布《关于开展全面数字化的电子发票试点工作的公告》&#xff0c;自2023年11月01日起开展数电票试点。千呼万唤始出来&#xff0c;拉开了北京地区企业开展数电票试点的序幕。 百望云作为数电票行业翘楚&#xff0c;电子发票服务平台供应商&#xff0c…

FiRa标准——MAC实现(二)

在IEEE 802.15.4z标准中&#xff0c;最关键的就是引入了STS&#xff08;加扰时间戳序列&#xff09;&#xff0c;实现了安全测距&#xff0c;大大提高了测距应用的安全性能。在FiRa的实现中&#xff0c;其密钥派生功能是非常重要的一个部分&#xff0c;本文首先对FiRa MAC中加密…

力扣429.N叉树的层序遍历(Java BFS解法)

Problem: 107. 二叉树的层序遍历 II 文章目录 思路解题方法复杂度Code同类型补充题&#xff1a; 思路 BFS的核心是借助队列&#xff0c;将树的每一层节点先添加到其中&#xff0c;再在处理当前层时&#xff08;将当前层的节点出队列&#xff09;同时将下一层的节点添加到队列中…

Spring面试题:(七)Spring AOP思想及实现

AOP思想的概念 AOP的实现&#xff1a;动态代理技术 通过spring容器获取目标对象和增强对象&#xff0c;通过动态代理生产代理对象&#xff0c;在目标对象的目标方法执行增强方法&#xff0c;返回生成代理对象给spring容器&#xff0c;在获取bean时则获取代理对象。 JDK代理和…

postman设置动态token, 每次登录更新token

postman设置动态token, 每次登录更新token 文章目录 postman设置动态token, 每次登录更新token问题1. 设置全局变量2. 新建登录接口3. 设置脚本4. 切换环境5. 配置动态token 问题 token过期时间一般比较短, 每次使用postman调用接口都token非常麻烦 实现token过期后, 调用一次…

Axure原型设计工具怎么样?有替代软件吗?

Axurerp是一种快速原型设计工具&#xff0c;可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型&#xff0c;还可以在Axurerp中完成一系列用户体验设计。在本文中&#xff0c;我们将根据用户体验设计师的真实经验&#xff0c;触发用户体验设计师的实际工作&…

sqlalchemy-orm联表查询指定字段

1. 联表查询全部字段 from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker# 创建数据库连接 engine create_engine(mysql://username:passwordlocalhost/database_name) Session sessionmaker(bindengine) session Session()# 联表查询 query …

【rl-agents代码学习】02——DQN算法

文章目录 Highway-env Intersectionrl-agents之DQN*Implemented variants*:*References*:Query agent for actions sequence探索策略神经网络实现小结1 Record the experienceReplaybuffercompute_bellman_residualstep_optimizerupdate_target_network小结2 exploration_polic…

2.5k的ChatGPT-Java版SDK升级1.1.2-beta0支持GPT-4V、Dall-e-3模型、ToolCalls、微调Job、TTS...

1、项目简介 Chatgpt-Java是OpenAI官方Api的Java SDK&#xff0c;可以快速接入项目使用。支持OpenAI官方全部接口。 目前收获将2500star&#x1f31f;。 开源地址&#xff1a;https://github.com/Grt1228/chatgpt-java官方文档&#xff1a;https://chatgpt-java.unfbx.com/最…

Flutter笔记:Opacity、Offstage和Visibility可见性的比较

Flutter笔记 Flutter笔记&#xff1a;Opacity、Offstage和Visibility可见性的比较 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_…

AtCoder ABC154

C - Distinct or Not 签到题&#xff0c;注意大小写和以前的不一样 D - Dice in Line 签到题2&#xff0c;用个窗口即可 E - Almost Everywhere Zero 数位DP&#xff08;搜索&#xff09;的例题 pos表示当前搜索到的位置&#xff08;开始为0&#xff0c;结束为n&#xff09; …