【Gulimall+】Nginx代理服务器+网关:实现动静分离和负载均衡

本文介绍了Nginx的功能及配置。Nginx集Web服务器、反向代理和负载均衡于一体,可将用户请求转发到内网服务器。通过docker启动Nginx并进行代理配置,实现动静分离,静态资源存于Nginx,动态资源放微服务,减轻微服务压力,还介绍了网关路由配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

Nginx是集Web服务器+反向代理+负载均衡于一体,通常作为负载均衡器暴露在外网接受用户请求,使用其反向代理的功能,将用户的请求转发到实际提供服务的内网服务器。
在这里插入图片描述

docker启动

docker run -p80:80 --name nginx -d nginx:1.10  

将容器内的配置文件拷贝到当前目录 (注意后面有个小点)会在当前目录产生一个nginx文件夹

docker container cp nginx:/etc/nginx .  

将该nginx文件中的所有配置移位置,以便映射

mv ./nginx/* /mydata/nginx/conf/
rm -rf ./nginx

终止原容器, docker stop nginx
执行命令删除容器:docker rm nginx

启动新的 nginx 执行以下命令

 docker run -p 80:80 --name nginx \
 -v /mydata/nginx/html:/usr/share/nginx/html \
 -v /mydata/nginx/logs:/var/log/nginx \
 -v /mydata/nginx/conf/:/etc/nginx \
 -d nginx:1.10
docker update nginx --restart=always

这个是我构建的最终nginx目录结构
在这里插入图片描述

代理配置

先看下人家自带的nginx配置的部分

 	upstream gulimall{ #发给一组上游服务器
    	server 192.168.1.100:6060;  #网关
    }
    include /etc/nginx/conf.d/*.conf;

include /etc/nginx/conf.d/.conf;这一句表示会加载该目录下的所有.conf配置文件
原本有个default.conf,我又复制新建了个gulimall.conf,看看我整了啥

server {
    listen       80;
    server_name  gulimall.com *.gulimall.com yfxu.ngrok2.xiaomiqiu.cn;
   
    location  /static/ {
       root   /usr/share/nginx/html;
    }
    
    location /payed/ {
        proxy_set_header Host order.gulimall.com; #指定域名. 注:此处的$host为外网域名,不能为
        proxy_pass http://gulimall; #在nginx.conf中设置的上游服务器组
    }

    location / {
	proxy_set_header Host $host; #不让host丢失,要不网关没法根据host进行lb
	proxy_pass http://gulimall; #在nginx.conf中设置的上游服务器组
    }

  
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

在这里我加了个几个被监听的域名,如果这些域名的uri的请求以/static/开始,就去/usr/share/nginx/html下找静态资源。
其余都交给网关。有一点值得关注的是nginx转发请求时会丢失Host,所以得人为加上。PS:yfxu.ngrok2.xiaomiqiu.cn为外网域名
在这里插入图片描述
用户访问nginx ,nginx反向代理到网关,网关在转发请求给我们的微服务。在网关进行统一的鉴权认证、限流、日志收集等工作。nginx还存储静态资源(比如css、js),动态资源放在微服务里面,这就是实现了动静分离。静态资源放在nginx,所有要经过服务器处理的页面放在对应的微服务中。动静分离的好处减轻微服务的压力。

走,看下网关的路由配置去,了解下怎么分配到不同服务请求动态资源的

spring:
  cloud:
    gateway:
      routes:

        - id: coupon_route
          uri: lb://gulimall-coupon # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/coupon/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: ware_route
          uri: lb://gulimall-ware # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/ware/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: member_route
          uri: lb://gulimall-member # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/member/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: thirdparty_route
          uri: lb://gulimall-third-party # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/thirdparty/**
          filters:
            - RewritePath=/api/thirdparty/(?<segment>.*),/$\{segment}

        - id: product_route
          uri: lb://gulimall-product # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/product/**
          filters:
            - RewritePath=/api/(?<segment>.*),/$\{segment}

        - id: admin_route
          uri: lb://renren-fast # lb(load balance)代表从注册中心获取服务
          predicates:
            - Path=/api/**
          filters:
            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}

        - id: product_host_route
          uri: lb://gulimall-product # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=gulimall.com, item.gulimall.com   #根据目标服务主机host判断,所以需要放在后面

        - id: search_host_route
          uri: lb://gulimall-search # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=search.gulimall.com   #根据目标服务主机host判断,所以需要放在后面

        - id: auth_host_route
          uri: lb://gulimall-auth # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=auth.gulimall.com   #根据目标服务主机host判断,所以需要放在后面

        - id: cart_host_route
          uri: lb://gulimall-cart # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=cart.gulimall.com  #根据目标服务主机host判断,所以需要放在后面

        - id: order_host_route
          uri: lb://gulimall-order # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=order.gulimall.com  #根据目标服务主机host判断,所以需要放在后面

        - id: member_host_route
          uri: lb://gulimall-member # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=member.gulimall.com  #根据目标服务主机host判断,所以需要放在后面

        - id: seckill_host_route
          uri: lb://gulimall-seckill # lb(load balance)代表从注册中心获取服务
          predicates:
            - Host=seckill.gulimall.com  #根据目标服务主机host判断,所以需要放在后面

nginx直接代理给网关,网关判断:

  • 如果/api/,转交给对应的服务器(本项目后台系统的前端请求是/api/)
  • 如果是 满足域名,转交给对应的服务(本项目的前台系统的前端请求是直接用域名请求的)

设置本地域名
sudo vim /etc/hosts
在这里插入图片描述
sudo /etc/init.d/networking restart 或者 service network-manager restart

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

星空•物语

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

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

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

打赏作者

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

抵扣说明:

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

余额充值