访问局域网内其他主机的虚拟机上部署的项目

  最近比较忙,好长时间没写博客了,今天挤点时间写一写,也就当做这段时间碰到的一个问题

  首先,博主使用的linux是Ubuntu16.04:

  

   其次,局域网内有两台主机,IP分别是192.168.28.94和192.168.28.213,下文分别简称94和213,可见这两个主机处于同一网段,是可以连通的,可以互ping试一下,如果不能ping通,看下是否是网线没连上,防火墙有没有关

   接着,我们的虚拟机地址是192.168.209.129,下文简称129,虚拟机运行在213上,虚拟机和213主机是可以ping通的,如果ping不通,看下虚拟机和213的防火墙有没有关,而我们的94是连不上虚拟机的,自然也就ping不通了

   好了,现在问题是让94主机访问虚拟机上的项目,这里使用.net core项目为例,也可以是其他项目,如java.python等等都可以

   为了解决这个问题,我的想法是这样的,94可以连上213,而213可以连上虚拟机129,那么可以在213主机上做一个反向代理,让请求转发到虚拟机上,有了这个思路,我们就可以下手了

  一、安装dotnet,运行.net core项目

  如果是java,就是安装JDK,如果是python就是安装python的编译器了,dotnet的SDK安装可以参考我之前的博客:https://www.cnblogs.com/shanfeng1000/p/11065804.html

  

  dotnet安装好之后,我们可以先运行.net core项目,如果没有,可以直接生成一个:

  输入dotnet new mvc就能创建一个mvc项目,记得创建前先创建一个目录存放,比如这里先创建了一个demo目录

  

  使用dotnet run命令运行项目就可以了,但是我们不采用这种方式,因为他会默认启动运行在http的5000端口,https的5001端口,而且当访问http的5000端口,会自动重定向到https的5001端口,当然我们可以在项目的Properties目录下的launchSettings.json中去修改启动设置,但是,我们保留项目的完整性,使用其他方法

  首先使用dotnet build生成项目:

  

  生成就是简单的打包,项目生成后的可执行文件子bin/Debug/netcoreapp2.2目录下,如下面的demo.dll

  

   然后在bin/Debug/netcoreapp2.2目录下执行 dotnet demo.dll  --server.urls http://localhost:5050 &,注意,命令后面有&符号,表示命令在后台执行,而不用导致当前shell堵塞,.net core 默认端口是5000,这里改成5050,这个可随意

   如果不在bin/Debug/netcoreapp2.2目录下执行,那么demo.dll前就要带上相应的路径

  

   现在我们可以在虚拟机上使用:curl  http://localhost:5050 访问了

   当我们在213主机上的浏览器访问这个项目时:http://192.168.209.129:5050,却访问不到,这个是因为我们监听的接口是http://localhost:5050,所以213上当然访问不到了,如果要让213能访问,上面的启动项的localhost改成*就可以了

  如:dotnet demo.dll  --server.urls http://*:5050

  二、使用nginx做反向代理

   nginx的安装可以参考我的博客:https://www.cnblogs.com/shanfeng1000/p/11063851.html

   这里为了简单,直接就使用sudo apt install nginx进行安装了

  安装完成之后,进入 /etc/nginx/conf.d,执行 sudo cp  ../sites-available/default demo.conf 复制一份默认的配置文件放到当前目录(conf.d),然后指定 sudo vim demo.conf 进入编辑

  

   找到server节点,修改成如下,因为5000端口是.net core 默认端口,避免以后使用时冲突,所以这里我们使用50000端口:

  

  在server节点在找到server_name节点,修改服务名,可随意,如这里改为demo,接着在server节点下找到 location 节点,修改成如下:

  

    注意,上述配置均以分号结尾

  现在退出后,使用 sudo nginx 命令开启nginx,或者如果已经开启了,使用sudo nginx -s reload 重新加载配置就可以了,也可以在reload前,先试用sudo nginx -t 先测试一下配置是否正确

   

   另外,备注一下,如果运行时,出现:nginx: [error] open() "/run/nginx.pid" failed (2: No such file or directory)

  这个是因为master进程已经关闭了。直接使用sudo nginx命令开启就可以了:

  

  现在就可以在213主机上的浏览器上使用:http://192.168.209.129:50000/访问了

 

     

  三、使用IIS做反向代理

   213是windows系统,使用其他工具做反向代理也行,这里使用IIS

  先在开始菜单搜索IIS:

  

  如果没有,那么打开开始=》运行,输入control,或者win+r运行,输入control

   

  打开控制面板后,选择【程序与功能】,接着在左边选择【启用或者关闭Windows功能】

   

   弹出窗口后勾选Internet Information Services:

  

  然后确定等待完成就可以了,在开始菜单搜索IIS就能搜索到了,这一步可能需要重启电脑才能生效

  打开IIS后,我们还需要安装ARR,才能使用反向代理的功能:

  

   Arr下载地址:https://www.iis.net/downloads/microsoft/application-request-routing

  Arr安装好之后,需要重启IIS生效,在cmd控制台中输入iisreset重启IIS,然后再打开IIS管理器就有上图中的Application Request Routing Cache了,我们点击进入,选择邮编的Server Proxy settings

  

 

   然后勾选Enable Proxy,其他基本都不用改,当然,你如果需要,也可以修改,接着点击【应用】就可以了,

  

 

  接着右键左边的网站项,新建网站,

   

  新建好之后,再点击建好的网站,进入URL重写:

  

 

  在【入站规则】中右键,选择【新建规则】=》【空白规则】,名称随意填,模式输入 ^(.*)

   

  打开条件,添加条件,在条件输入中输入 {HTTP_HOST} ,然后在模式中输入 ^192.168.28.213:50000$ ,这个是说,所有的 192.168.28.213:50000请求将被拦截转发,点击确定

   

   然后在下面的操作中修改操作类型为重写,重写Url为:http://192.168.209.129:50000/{R:1},最后点击右边的应用就可以了

  

   按着上面的步骤,再次进入Demo网站下的Url重写就是这样子的

  

   然后启动网站:

  

   接着打开浏览器,本地就能访问50000端口了,在其他局域网下也能通过213的50000端口访问到213上的虚拟机的项目了,比如在94上访问:http://192.168.28.213:50000

   最后画张图示意:

  

 

 

 

 

   

 

posted @ 2019-09-05 14:49  没有星星的夏季  阅读(2173)  评论(0编辑  收藏  举报