Nginx02 -- 配置文件_fengxianaa的博客-CSDN博客
1. 代理转发
Nginx提供代理转发功能,做动静分离,使用proxy_pass配置
1. 快入体验
1. 项目准备
创建一个普通的Maven项目
1. pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.6.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
2. Application
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
3. Controller
@RestController
public class NginxController {
@GetMapping("hello")
public String hello(){
return "Hello Nginx!!!";
}
}
2. nginx.conf
切换到 /home/nginx 目录,复制一个配置文件
内容如下
server {
#监听端口
listen 80;
#域名
server_name yase.cn;
location / {
#站点根目录,静态资源都可以放到这里
root /home/web/yase;
#首页
index yase.html;
}
location /hello {
proxy_pass http://192.168.56.1:8080;
}
}
注意:使用 nginx -t、nginx -s reload 校验
3. 测试
重新加载配置文件、启动项目后,浏览器访问:http://yase.cn/hello
原理解释:
2. 详细策略
使用proxy_pass时,有好几种情况,不同的配置会转发到不同的路径
1. 第一种
端口号后有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/hello
好处:后端接口不对外暴露
2. 第二种
端口号后没有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/ng/hello
在 DispatcherServlet 的 doDispatch 方法中打断点可以看到请求到后端的路径
3. 第三种
请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/yase/hello
4. 第四种
比第三种最后少了一个“/”
请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/yasehello
5. 第五种
端口号后有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080//hello
6. 第六种
端口号后有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/ng/hello
5. 建议
一般建议配置如下
2. 负载均衡
1. 快速体验
1. nginx.conf
还是修改 yase.conf
# 新增 upstream 配置,名称是:yase
upstream yase {
server 192.168.56.1:8080;
server 192.168.56.1:8888;
}
server {
#监听端口
listen 80;
#域名
server_name yase.cn;
#编码识别
#charset koi8-r;
#日志格式及日志存放路径
#access_log logs/host.access.log main;
#location 用于匹配请求路径
location / {
# 设置请求转发的 yase
proxy_pass http://yase/;
}
#错误页面
#error_page 404 /404.html;
}
注意:使用 nginx -t、nginx -s reload 校验
2. 修改项目
- 修改Controller
- 修改启动端口
浏览器访问结果:8080和8888交替出现
2. 具体策略
1. 轮询
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除掉。
上面快速体验就是轮训策略
2. 加权轮询
使用weight,代表权重,默认为1,权重越高被分配的客户请求就越多
上图:一同访问 6 次,8888被分配 4 次,8080被分配 2 次
使用场景:两天服务器性能不一样,性能高的就权重高
3. IP Hash
生产环境不用,只做了解、测试
请求按访问 IP 的 hash 值分配,这样每个访客固定访问一个后端服务器
4. down
表示某个机器下线,不参与负载均衡
这时候再访问,就只能分配给8888
5. backup
表示备用主机,其他机器都不能用了,请求才会分配给他
上图:请求只会分配给 8080
上图:请求只会分配给备用主机 8888