nginx 内网转发

对外暴露虚假的地址,真实地址限制为内部调用。当对外地址转发到内部服务器,可做拦截、验证等等,校验通过后,再做静态转发。代码如下:

#nginx 配置

#对外暴露的地址
location /public/api {
      proxy_pass http://192.168.0.100:10086;
      index index.html index.htm;
}

#真实服务地址
location /private/api {
    # 限制为内部调用
    internal;
    proxy_pass http://192.168.0.200:10010;
    index index.html index.htm;
}

// 192.168.0.100:10086端口后台服务


import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Slf4j
@RestController
public class TestController {

    /**
     * 拦截所有请求
     **/
    @RequestMapping(value = "/**")
    public void auth (@RequestBody String body, HttpServletRequest request, HttpServletResponse response) {
        
        String requestURI = request.getRequestURI();
        
        // TODO 完善自己的验证规则
        if(requestURI.startsWith("/public/")){
            response.setStatus(500);
            return;
        }
        
        // TODO 完善自己的路由规则
        String interForwardURL = requestURI.replaceAll("/public/", "/private/");
        response.addHeader("X-Accel-Redirect",interForwardURL);
        response.setStatus(200);
    }
}
// 192.168.0.200:10010 后台服务

@RestController
@RequestMapping("/private")
public class TestController {

    @RequestMapping(value ="/api",method = {RequestMethod.GET,RequestMethod.POST})
    public void testMethod(@RequestBody TestDTO testDTO){
        System.out.println("success");
    }
    
}

http://192.168.0.200:10010/private/api 请求失败(404 Not Found)

http://192.168.0.100:10086/public/api 请求成功(200 OK)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值