nginx反向代理

目录

什么是反向代理

为什么要反向代理

提高访问速度

充当防火墙

解除访问限制

负载均衡

怎么实现反向代理

测试

配置含义


什么是反向代理

例如以下测试接口:

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {

    @RequestMapping("/test")
    public String demo() {
        System.out.println("test success!");
        return "test success!";
    }
}

后端项目运行起来,可以用/test直接访问。反向代理就是让一个第三方服务器转发这个/test请求,不直接去访问/test。也就是说反向代理直接访问的不是目标服务器,而是访问一个代理服务器。

为什么要反向代理

提高访问速度

目标服务器返回的数据会缓存在代理服务器中,当客户端再次访问时,会直接从代理服务器中获取数据, 提高了客户端的访问速度。

充当防火墙

因为客户端的请求都必须经过代理服务器转发到目标服务器,所以可以在代理服务器中对请求进行限制,以及过滤一些非法请求。

解除访问限制

有一些服务器我们不能直接访问,但是可以通过反向代理来间接访问。

负载均衡

反向代理服务器可以当作负载均衡器,减轻单台服务器的压力,增加网站的吞吐量。

怎么实现反向代理

以下是nginx配置文件:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location /api/ {
            proxy_pass   http://localhost:8080/;
        }

        location / {
            root   html;
            index  index.html index.htm;
        }

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

 以下是实现了反向代理的配置:

location /api/ {
    proxy_pass   http://localhost:8080/;
}

nginx默认访问端口是80,也可以用localhost直接访问。

nginx反向代理_第1张图片

我们通过/api/test去访问nginx,然后请求被修改成/test并转发给后端服务器。

测试

用以上测试接口为例,先测试直接访问。 

测试成功

nginx反向代理_第2张图片

通过反向代理来访问

测试成功

nginx反向代理_第3张图片

配置含义

以下配置的含义是将请求路径中的/api去除,并转发给localhost,端口号为8080。

location /api/ {
    proxy_pass   http://localhost:8080/;
}

和上面的配置不同,下面的这种配置是将请求路径直接拼接并转发给目标服务器。

location /api/ {
    proxy_pass   http://localhost:8080;
}

这次将配置修改为下面那个进行测试

使用以下命令重启nginx

nginx -s reload

访问失败

nginx反向代理_第4张图片

将接口的访问路径改为/api/test

访问成功

nginx反向代理_第5张图片

这里访问的是80端口,并不是直接访问8080端口,说明反向代理成功。 

你可能感兴趣的:(基本概念,nginx,spring,boot,java,后端)