Nginx03 -- 代理转发

Nginx02 -- 配置文件_fengxianaa的博客-CSDN博客

1. 代理转发

Nginx提供代理转发功能,做动静分离,使用proxy_pass配置

1. 快入体验

1. 项目准备

创建一个普通的Maven项目

Nginx03 -- 代理转发_第1张图片

Nginx03 -- 代理转发_第2张图片

1. pom.xml


  org.springframework.boot
  spring-boot-starter-parent
  2.3.6.RELEASE




  
    org.springframework.boot
    spring-boot-starter-web
  

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 目录,复制一个配置文件

Nginx03 -- 代理转发_第3张图片

内容如下

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

Nginx03 -- 代理转发_第4张图片

原理解释:

2. 详细策略

使用proxy_pass时,有好几种情况,不同的配置会转发到不同的路径

1. 第一种

Nginx03 -- 代理转发_第5张图片

端口号后有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/hello

好处:后端接口不对外暴露

2. 第二种

Nginx03 -- 代理转发_第6张图片

端口号后没有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/ng/hello

在 DispatcherServlet 的 doDispatch 方法中打断点可以看到请求到后端的路径

Nginx03 -- 代理转发_第7张图片

3. 第三种

Nginx03 -- 代理转发_第8张图片

请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/yase/hello

Nginx03 -- 代理转发_第9张图片

4. 第四种

比第三种最后少了一个“/”

Nginx03 -- 代理转发_第10张图片

请求是: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

Nginx03 -- 代理转发_第11张图片

6. 第六种

端口号后有“/”,请求是:http://192.168.56.113/ng/hello,会转发到:http://192.168.56.1:8080/ng/hello

Nginx03 -- 代理转发_第12张图片

5. 建议

一般建议配置如下

Nginx03 -- 代理转发_第13张图片

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. 修改项目

  1. 修改Controller

Nginx03 -- 代理转发_第14张图片

  1. 修改启动端口

Nginx03 -- 代理转发_第15张图片

Nginx03 -- 代理转发_第16张图片

Nginx03 -- 代理转发_第17张图片

Nginx03 -- 代理转发_第18张图片

浏览器访问结果:8080和8888交替出现

2. 具体策略

1. 轮询

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器宕机,能自动剔除掉。

上面快速体验就是轮训策略

2. 加权轮询

使用weight,代表权重,默认为1,权重越高被分配的客户请求就越多

Nginx03 -- 代理转发_第19张图片

上图:一同访问 6 次,8888被分配 4 次,8080被分配 2 次

使用场景:两天服务器性能不一样,性能高的就权重高

3. IP Hash

生产环境不用,只做了解、测试

请求按访问 IP 的 hash 值分配,这样每个访客固定访问一个后端服务器

Nginx03 -- 代理转发_第20张图片

4. down

表示某个机器下线,不参与负载均衡

Nginx03 -- 代理转发_第21张图片

这时候再访问,就只能分配给8888

5. backup

表示备用主机,其他机器都不能用了,请求才会分配给他

Nginx03 -- 代理转发_第22张图片

上图:请求只会分配给 8080

Nginx03 -- 代理转发_第23张图片

上图:请求只会分配给备用主机 8888

你可能感兴趣的:(nginx,服务器)