? 前幾天接到個任務(wù),要和另一家公司對接,具體就是我這開一個接口給對面調(diào)用.因為一開始在內(nèi)網(wǎng)測試,那問題來了,怎么才能讓對面訪問到呢?
? 當(dāng)然是找運(yùn)維大兄弟.....操作也很簡單,就是用路由做一個端口映射,用公網(wǎng)ip做一個端口映射到我本機(jī)地址.這樣外網(wǎng)就能訪問到我的tomcat了.
比如說公網(wǎng)ip是192.168.1.0
,我的ip是192.168.1.1
,tomcat端口是8080.
那就在路由上配一個端口9876直接映射到本地tomcat 192.168.1.1:8080.那現(xiàn)在外網(wǎng)就可以通過http://192.168.1.0:9876/
訪問到本地http://192.168.1.1:8080/
了.
就這樣,做好了接口,問題又來了,因為這個接口是在核心系統(tǒng)里,那這樣就會把所有的接口都暴露了,肯定不行..
怎么做呢,怎么才能攔截這些請求呢? 當(dāng)然又去問了運(yùn)維大兄弟,再查了些資料,得知用Nginx可以只允許訪問指定的url,其他的都直接對外禁止訪問.
那怎么做呢?
重新修改下映射規(guī)則,不直接映射到tomcat,先經(jīng)過nginx,通過nginx再把請求發(fā)送到tomcat.
這里就重新映射一個端口8000,在nginx中監(jiān)聽這個端口,然后再配置訪問規(guī)則,再代理到tomcat
在nginx.config中添加一段server
server {
#監(jiān)聽8080端口,這個8080是路由映射到本機(jī)的端口
listen 8000;
server_name 0.0.0.0;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
#阻止所有請求,這里將永遠(yuǎn)輸出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;
}
}
這里的流程就是,外網(wǎng)通過訪問公網(wǎng)ip+給定的端口,在路由根據(jù)映射規(guī)則,再訪問到我這臺電腦,這個時候請求不是直接去訪問本機(jī)的接口,而是進(jìn)入了Nginx,在這里,會去檢查請求的url是否與配置允許的地址相同,不同的話就會403 Forbidden錯誤啦,當(dāng)uri是/test/processe
時,就能訪問實際代理的http://192.168.4.48:8080/test/processe
接口了
那這樣就可以讓對面只能訪問指定的接口.
原文鏈接:端口映射+nginx對外請求控制 | 火堯