CentOS7绑定多ip与Nginx整合实现应用网络隔离

Stella981
• 阅读 720

相信点进来看的朋友们可能是被我的标题吸引的,没错,我就是标题党,本文所实现的并不是真正的网络隔离,只是实在想不出什么好的标题了,才这么写的

或许在平时的使用中,(我说的是内网环境下),可能会看到如下的url地址

咋一看这些url有什么问题?没什么毛病,我想说的是三种类型的项目url暴露形式,这三种形式都可以将自己的应用暴露出来,给内网的用户使用,针对上面四种url,我下面细说一下是哪三种。

这里只讨论直接面向用户暴露,用户可以通过浏览器访问到的情况,不讨论微服务或者其他RPC服务这种暴露给服务调用的情况

  • 直接暴露端口的形式。不管是走了nginx还是直接其他web应用,都直接暴露端口给用户访问。
  • 走nginx做映射,不同的应用有不同的location上下文。
  • 直接nginx的/就映射到应用,单一ip单一应用模式。

首先,在我看来,如果要排序的话,我的接收程度是3>2>1。首先最不喜欢的就是直接暴露端口给用户看,这样子真的很丑。最好的就是一个ip直接过来就可以访问应用,折中是带url前缀的情况。但是很多时候,很多人都是直接暴露端口出来给用户访问,实在不能忍啊,同时如果开启了防火墙的话,还需要暴露其他端口,其实我只希望暴露出80端口和22端口给http和ssh,其他的端口都不想暴露出来。

那么对于一个ip一个应用的方式,是不是要一个应用部署一台服务器呢?如果对于生产环境来说,我的建议是的,所以,我在本文写到的很多都是我自己玩耍弄的,并不建议看到的朋友直接在自己的生产环境这么玩。如果不慎这么玩了,那么后果自负了。回到正题,如果服务器资源不就匮乏的情况下,能不能在一台服务器实现绑定多个ip,不同的ip进来访问到不同的应用呢?下面我们一起来探索一下。

CentOS7 配置多个ip

实际上,一台Linux服务器是支持绑定多个ip的,我们这里以单网卡的情况讨论,多网卡的情况在这不讨论了。由于都是在同一个网卡,因此性能什么的肯定不会有本质的提升,只能说做到一个看起来的网络隔离而已。

我们可以先查询一下自己的网卡,如果是CentOS7,可以是使用如下命令:ip a。如下图所示,圈出来的ens192就是网卡名称。不同的机器这个可能不同。 CentOS7绑定多ip与Nginx整合实现应用网络隔离

接着可以到/etc/sysconfig/network-scripts找到与你机器网卡对应的配置文件,我的是ifcfg-ens192。接着编辑这个配置文件。添加圈出的内容 CentOS7绑定多ip与Nginx整合实现应用网络隔离

圈出来的就是需要添加的ip,要注意IPADDR不能重复,要么用1,2这样的数字区分。编辑完成后,重启网络。执行systemctl restart network。然后再次执行ip a,如果看到下面圈出的部分,证明绑定成功了。 CentOS7绑定多ip与Nginx整合实现应用网络隔离

可以看到,显示的ip就是我们刚添加进去的ip。

Nginx配置

如果安装有nginx,并且是默认配置的话,我们可以在浏览器通过绑定的ip挨个访问,看是否都可以显示出nginx的欢迎页面。ip绑定完成之后,就是如何通过nginx的配置来让不同的ip访问到不同的web应用(包括反向代理也是一样的)。下面让我们一起来配置一下。

首先,需要让nginx支持多conf,因为不同的项目用不同的conf会很好维护。在nginx安装目录下(下面用$NGX_HOME变量来代替)$NGX_HOME/conf下面,创建一个叫conf.d的目录。然后在nginx.conf加入include $NGX_HOME/conf/conf.d/*conf。如下图 CentOS7绑定多ip与Nginx整合实现应用网络隔离

此时的nginx.conf,除了http context不要有其他context了,所以的server context移动到conf.d下面的各个应用的conf了。在每个应用自己的conf文件,要注意修改server_name为要绑定的ip

示例

我们弄一个示例,来测试一下是否可以通过不同的ip访问到不同的应用。

在conf.d下面新建三个conf,如下图所示 CentOS7绑定多ip与Nginx整合实现应用网络隔离

以其中一个为例,如下图显示要注意的项 CentOS7绑定多ip与Nginx整合实现应用网络隔离

然后我们再创建三个项目目录,里面只放一个html文件 CentOS7绑定多ip与Nginx整合实现应用网络隔离

重启nginx服务之后,我们依次访问下如下url:

http://172.16.4.188 CentOS7绑定多ip与Nginx整合实现应用网络隔离

http://172.16.4.203

CentOS7绑定多ip与Nginx整合实现应用网络隔离

http://172.16.4.204

CentOS7绑定多ip与Nginx整合实现应用网络隔离

可见,我们绑定的ip对应不同应用已经生效了。

结束语

这只是个人的一个出于好奇心的一个实验,实践证明如果不想在一台机上通过不同端口和配置url前缀的形式给用户访问自己的应用,可以通过配置多个不同的ip,配置nginx映射让用户感觉到似乎是访问不同的服务器,而单个ip的形式也比较好看。不过还是要强调一下生产环境尽量不要这么玩,因为单机性能有限的,运行多个应用,不管在带宽还是CPU/内存上都是很容易到瓶颈的 我的尝试也是为了解决测试环境的问题而已,毕竟每个项目弄一台代理或者单独的应用服务器会有点浪费。同时不喜欢暴露80以外的端口给用户看到。

笔者本人水平有限,可能还有别的更好的办法只是我不知道而已,本文所描述的方式也只是本人即兴去测试的,难免会有错误,如果各位看官发现有什么错误或有什么更好的建议,欢迎评论区批评指正和提出宝贵的意见和建议。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
待兔 待兔
2个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
2年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
8个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这