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;

}

server中的反向代理配置:


location  /admin{   # admin的请求代理到
     //
    
    proxy_pass   http://test;  #  配置代理映射  (携带上http请求)
}

主从服务配置

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;
    }
}

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



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;
	

}

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


        - id: gulimall_product_route
          uri: lb://gulimall-product
          predicates:
            - Host=gulimall.com,item.gulimall.com

注意事项:

  • 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;
    }
}

注意:

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

在这里插入图片描述

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值