Nginx03 -- 代理转发

本文介绍如何使用Nginx进行代理转发实现动静分离,并通过不同配置展示多种转发路径的情况。此外,还介绍了Nginx负载均衡的基本配置,包括轮询、加权轮询、IPHash等策略。

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

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

  1. 修改Controller

  1. 修改启动端口

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

2. 具体策略

1. 轮询

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

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

2. 加权轮询

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

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

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

3. IP Hash

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

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

4. down

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

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

5. backup

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

上图:请求只会分配给 8080

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值