• Nginx入门+实战


    在日常项目开发,设计项目架构的过程中,常常会使用到代理的设计模式,而nginx这一重要的分布式中间件在项目应用中尤为广泛

    目前nginx在传统的项目中作用较为常见的是

    1. 将静态资源与动态数据进行动静分离,提升页面响应速度
    2. 对外屏蔽真实服务端地址,避免恶意攻击
    3. 微服务架构模式下,进行负载均衡至各个网关

    正向代理与反向代理?

    情景假设:你与店主

    正向代理:

    通俗版: 店主把你拉入黑名单不让你买东西了,但是你非要买,于是你找了个在白名单的人交朋友,让他帮你买东西,这就是正向代理

    专业版:C-S架构模式下,正向代理伪造的就是C端,客户端,通过改变不同的C端直接与S端交互
    在这里插入图片描述

    反向代理:

    通俗版: 很多人来店里买各种各样的东西,店里的东西都是由工厂低价进货过来的,店主不想让你们知道工厂的位置以免被抢生意,工厂也需要一个代理商给他们带货做推广,这就是反向代理

    专业版:C-S架构模式下,反向代理伪造的就是S端,服务端,客户端直接访问伪造的S端,伪造的S端与真正的S端进行交互
    在这里插入图片描述

    更通俗的理解: 正向代理:我找人办事,我是老板 。 反向代理: 我直播带货,我是打工人


    负载均衡

    增加服务器的数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的 情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负 载均衡

    Windows下安装nginx

    下载解压即可:
    目录结构分析:
    在这里插入图片描述

    核心文件nginx.conf剖析:

    在这里插入图片描述

    在这里插入图片描述

    整体配置

    在这里插入图片描述

    全局配置: 常用于性能配置

    负载均衡配置: (负载代理到的地址。上游服务器,一般是网关)

    upstream 表示反向代理的上游服务器,一般和proxy_pass搭配使用

    upstream test {
         server 127.0.0.1 : 8080 weight=1;
         server 127.0.0.1 : 8081 weight=1;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    server中的反向代理配置:

    
    location  /admin{   # admin的请求代理到
         //
        
        proxy_pass   http://test;  #  配置代理映射  (携带上http请求)
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    主从服务配置

    nginx中的include属性,可以实现多个服务的动态扩展,负载均衡

    nginx代理的核心即为http中的server端,过多的server配置堆积在conf文件里面将不好维护,便可以使用include形式,将多个从配置引入主配置中

    在这里插入图片描述


    nginx常用命令:

    1. 进入目录: start nginx 开启服务,此时会在logs文件夹中生成pid,关闭时会通过创建时的pid进行杀死进程
      在这里插入图片描述
    2. 停止 nginx -s stop/quit
    3. 重新加载配置 nginx -s reload
    4. 手动删除pid文件将导致nginx服务无法停止,此时需要taskkill /f /t /im nginx.exe删除相关的所有进程
    5. 主从配置时,使用include导入其他路径的conf,但注意server 必须要有不然报错(很坑)

    动静结合,负载均衡实战

    项目架构图:

    在这里插入图片描述

    1. 当我们访问gulimall.com时,nginx对代理至各个微服务集群的网关,由网关去映射服务

    涉及到的子server配置

    server {
        listen       80;
        server_name gulimall.com *.gulimall.com 124.223.7.41;
    
        #location /static/ {
        #    root /usr/share/nginx/html;
        #}
        
        location /payed/ {
            proxy_set_header Host order.gulimall.com;
            proxy_pass http://gulimall;
        }
        
        location / {
            proxy_set_header Host $host;
    		## 转给上层服务器进行负载进行处理
            proxy_pass http://gulimall;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    主配置设置负载均衡的网关层

    
    
    worker_processes  1;
    
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        sendfile        on;
    
        keepalive_timeout  65;
    
        #gzip  on;
    	
    	## 负载均衡映射
        upstream gulimall {
          server 127.0.0.1:88;
        }
    	
        include conf.d/*.conf;
    	
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    网关层核心配置:(使用Host配对方式而不是url)

    
            - id: gulimall_product_route
              uri: lb://gulimall-product
              predicates:
                - Host=gulimall.com,item.gulimall.com
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意事项:

    • nginx在转发给网关时,会丢失掉host主机地址,需要通过proxy_set_header Host 设置

    转发流程:
    对http://gulimall服务端 进行代理到 上层服务器网关层,再由网关进行映射到各个微服务

    动静分离:

    我们在请求页面静态资源时,一般是通过映射服务器下的某个目录的资源,这样响应就会十分慢且占资源,我们可以对静态资源的访问,映射到我们的nginx服务器当中
    在这里插入图片描述

    (这里我们可以将 /static/ 的请求映射到我们nginx 的根目录)

    在我们的子conf文件中添加映射配置

    server {
        listen       80;
        server_name gulimall.com *.gulimall.com 124.223.7.41;
    
        location /static/ { // 添加的映射配置
            root html;
        }
        
        location /payed/ {
            proxy_set_header Host order.gulimall.com;
            proxy_pass http://gulimall;
        }
        
        location / {
            proxy_set_header Host $host;
    		## 转给上层服务器进行负载进行处理
            proxy_pass http://gulimall;
        }
    
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    注意:

    • 这里观察下面的error.log 观察到 若以root 为key 进行配置,映射的路径前缀将会以nginx的根路径进行拼接!!

    在这里插入图片描述

    至此,就完成了nginx的负载均衡和动静分离实战

  • 相关阅读:
    网络编程 lesson6 服务器模型和网络超时检测
    opensbi firmware源码分析(3)
    博客添加评论功能及定制化样式
    提升效率必备:电脑文件批量重命名的实用技巧大放送
    JavaList集合根据ParentId递归【无限套娃】
    Mysql中日期相关的函数
    Unity可视化Shader工具ASE介绍——7、ASE实现Matcap效果和自定义节点
    P8842 [传智杯 #4 初赛] 小卡与质数2 垃圾筛
    window系统安装 NodeJS
    【实战】H5 页面同时适配 PC & 移动端 —— 旋转横屏
  • 原文地址:https://blog.csdn.net/qq_51131591/article/details/126436902