目录
例如以下测试接口:
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直接访问。
我们通过/api/test去访问nginx,然后请求被修改成/test并转发给后端服务器。
用以上测试接口为例,先测试直接访问。?
测试成功
通过反向代理来访问
测试成功
以下配置的含义是将请求路径中的/api去除,并转发给localhost,端口号为8080。
location /api/ {
proxy_pass http://localhost:8080/;
}
和上面的配置不同,下面的这种配置是将请求路径直接拼接并转发给目标服务器。
location /api/ {
proxy_pass http://localhost:8080;
}
这次将配置修改为下面那个进行测试
使用以下命令重启nginx
nginx -s reload
访问失败
将接口的访问路径改为/api/test
访问成功
这里访问的是80端口,并不是直接访问8080端口,说明反向代理成功。?