Nginx(看到就是赚到!)

Nginx

一. 反向代理服务器

正向代理:首先客户端需要配置,代理服务器代替客户端发送请求,站在目标服务器的角度,它是不知实际的客户端是谁,它只认为代理服务器是客户端。

反向代理:客户端不需要做任何的设置,代理服务器只是将请求转发给目标服务器,站在客户端的角度,不知道目标服务器是谁。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QBZdAPtQ-1677662948981)(images/正向代理.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mvueu2VK-1677662948983)(images/反向代理.jpg)]

二. Nginx的三个应用场景

2.1 静态资源服务器

​ 所谓的静态资源服务器,就是将一些静态资源直接放到nginx对应的路径中,可以直接访问最经典的应用场景就是部署前端项目,配置如下:

# 用户访问根路径的时候,默认访问 L:/other-location 这个路径下 a.html 文件
location / {
	root   L:/other-location;
	index  a.html;
}
2.2 作为反向代理服务器
2.2.1 代理多项目

在服务器上,只开放一个端口,但是需要定位到多个不同的项目,那么就可以使用代理来进行访问。

# 访问的前缀如果是 /demo1 会把请求转发到 http://localhost:8080/
location ^~ /demo1 {
	proxy_pass http://localhost:8080/; 
}

# 访问的前缀如果是 /demo1 会把请求转发到 http://localhost:8089/
location ^~ /demo2 {
	proxy_pass http://localhost:8089/;
}

对于 proxy_pass 后的路径最后的 / 问题,分为两种情况:

  1. 如果后面带上斜杠,会自动将url地址中location前缀去掉,然后访问对应的项目,例如:http://localhost/demo1/da,请求到达 http://localhost:8080/的时候,路径就是 http://localhost:8080/da
  2. 如果后面带上斜杠,不会去掉location中的前缀,例如:http://localhost/demo1/da,请求到达 http://localhost:8080/的时候,路径就是 http://localhost:8080/demo1/da (这个可以在springboot项目中使用 server.servlet.context-path来指定项目前缀)
2.2.1 代理集群
http {
	# 其他省略
	
	# web是自定义的名字
	upstream web {
        ip_hash;
        server localhost:8080;
        server localhost:8081;
        server localhost:8082; 
    }
    
    server {
    	#其他省略
    	location ^~ /cluster {
    	   # web要与upstream后面的只保持一致
           proxy_pass http://web/;
        } 
    }
}

集群配置有三种负载均衡策略:

  1. 轮询的方式,每个结群的节点默认访问两次;
  2. 权重方式,权重越大,处理的请求越多;
  3. ip_hash,同一个ip所有的请求都会打到同一台集群节点上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pez3RLIJ-1677662948984)(images/load-balance.jpg)]

2.3 做IP限流

可以使用Nginx限制用户的访问,例如每秒只能访问固定的次数,具体配置如下:

第一步,在 http 模块下添加如下的配置

# 1.limit_req_zone 是nginx提供的一个功能,是用来做ip访问次数限制的配置
# 2.$binary_remote_addr 也是nginx内部提供的一个功能,自动帮我们去获取远程访问的地址
# 3. my_name: 表示给当前限流功能取了一个名字,例如nginx配置很多项目,不同的项目可能限流策略不同
# 4. 20m指的是信息存储的划分的内存大小;
# 5. rate 表示速率的意思;
limit_req_zone $binary_remote_addr zone=my_name:20m  rate=1r/s;

# 可以配置很多个,通过不同的名字来加以区别
limit_req_zone $binary_remote_addr zone=one:20m  rate=10r/s;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tlFjTglY-1677662948985)(images/limit-req.jpg)]

第二部,在对应的location位置,加上如下的代码

# limit_req 是固定值
# zone=my_name 表示使用哪个限流配置
# burst=3 如果访问的次数操作限流次数,那么最多可以将3个请求缓存起来,然后按照指定的速率继续访问;可以不写
limit_req zone=one burst=3;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XQin80x7-1677662948985)(images/req_limit-config.jpg)]
最多可以将3个请求缓存起来,然后按照指定的速率继续访问;可以不写
limit_req zone=one burst=3;


[外链图片转存中...(img-XQin80x7-1677662948985)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值