Nginx动态转发到动态IP的内网服务
Nginx如何动态转发到不同IP的内网服务?
场景:
有三台主机,A ,B,C;A和B网络互通,B和C互通,而B的IP固定不变,A和C都是动态IP。
B主机作为代理,转发到C服务器上,A作为客户端,如何做?才能一次配置后不需要修改B,就可以代理到C上?
通常,我们配置Nginx代理如下:
location ^~ /proxy/ {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
但是这种方式面对动态IP,就会比较头疼了。所以现在出现了很多微服务,通过注册中心和心跳机制,可以灵活的剔除联系不上的主机,从而达到自动化的效果
但是Nginx这里能否做到更灵活一点?
答案是肯定的,
怎么做?
一次配置
就是在发起到B服务的请求中,将C的动态IP带上,如下:
curl http://B-host/proxy/newC-host:port/…
这样,我们截取proxy后面的信息作为代理的目标,就能一次配置B,后续都不需要在修改B了
Nginx中有一个变量:request_uri,这个变量可以获取到对应的请求接口路径,不包含IP地址,在结合正则表达式,就能很好的实现功能
例如,
接口:http://B-host/proxy/newC-host:port/…
对应的request_uri 就是/proxy/newC-host:port/…
看配置
if ($request_uri ~ ^/proxy/(.*)){ #通过正则表达式,截取指定路径
set $backend_host http://$1;
}
location ^~ /proxy/ {
proxy_pass $backend_host;
#proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
这里说明一下,通过正则判断$request_uri 是否是以/proxy开头,是的话,就将/proxy/后面的数据截取
,赋值给变量backend_host 为http://$1 ,其中$1 就是/proxy/ 后面的所有路径
if ($request_uri ~ ^/proxy/(.*)){
set $backend_host http://$1;
}
接下来就是指定代理方向就可以了
location ^~ /proxy/ {
proxy_pass $backend_host;
proxy_set_header Host $Host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
}
配置好后,重启Nginx
nginx -s reload
完成
看效果
这样,只要B固定,C变动,也不需要改变B的配置,只要知道C的IP和端口号,A就能访问到
应用场景
那么,这种配置方案有什么应用场景吗?
肯定是有的,不然我也不会那么辛苦写这些了
一般在企业中,会有本地环境和测试环境。测试环境可能会有很多很多的服务,而本地环境只和测试环境的Nginx打通,和其他服务可能网络不通,但是想要更好的在本地调试提高工作效率,就可以通过本文的配置方式做代理了
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfkhfi
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13