端口映射+nginx对外请求控制

前几天接到个任务,要和另一家公司对接,具体就是我这开一个接口给对面调用.因为一开始在内网测试,那问题来了,怎么才能让对面访问到呢?

​ 当然是找运维大兄弟…..操作也很简单,就是用路由做一个端口映射,用公网ip做一个端口映射到我本机地址.这样外网就能访问到我的tomcat了.

比如说公网ip是192.168.1.0,我的ip是192.168.1.1,tomcat端口是8080.

那就在路由上配一个端口9876直接映射到本地tomcat 192.168.1.1:8080.那现在外网就可以通过http://192.168.1.0:9876/访问到本地http://192.168.1.1:8080/了.

就这样,做好了接口,问题又来了,因为这个接口是在核心系统里,那这样就会把所有的接口都暴露了,肯定不行..

怎么做呢,怎么才能拦截这些请求呢? 当然又去问了运维大兄弟,再查了些资料,得知用Nginx可以只允许访问指定的url,其他的都直接对外禁止访问.

那怎么做呢?

重新修改下映射规则,不直接映射到tomcat,先经过nginx,通过nginx再把请求发送到tomcat.

这里就重新映射一个端口8000,在nginx中监听这个端口,然后再配置访问规则,再代理到tomcat

在nginx.config中添加一段server

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
server {
#监听8080端口,这个8080是路由映射到本机的端口
listen 8000;
server_name 0.0.0.0;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#阻止所有请求,这里将永远输出403错误
deny all;
}
#允许访问 /test/processe接口
location ~ /test/processe {
# 代理本地项目url
proxy_pass http://192.168.4.48:8080;
}
#如果还有其他接口,就再添加一个location
#location ~ /test/processe1 {
#proxy_pass http://192.168.4.48:8080;
#}
#location ~ /test/processe2 {
#proxy_pass http://192.168.4.48:8080;
#}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

这里的流程就是,外网通过访问公网ip+给定的端口,在路由根据映射规则,再访问到我这台电脑,这个时候请求不是直接去访问本机的接口,而是进入了Nginx,在这里,会去检查请求的url是否与配置允许的地址相同,不同的话就会403 Forbidden错误啦,当uri是/test/processe时,就能访问实际代理的http://192.168.4.48:8080/test/processe接口了

那这样就可以让对面只能访问指定的接口.