訪問局域網內其餘主機的虛擬機上部署的項目

  最近比較忙,好長時間沒寫博客了,今天擠點時間寫一寫,也就當作這段時間碰到的一個問題html

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

  

   其次,局域網內有兩臺主機,IP分別是192.168.28.94和192.168.28.213,下文分別簡稱94和213,可見這兩個主機處於同一網段,是能夠連通的,能夠互ping試一下,若是不能ping通,看下是不是網線沒連上,防火牆有沒有關python

   接着,咱們的虛擬機地址是192.168.209.129,下文簡稱129,虛擬機運行在213上,虛擬機和213主機是能夠ping通的,若是ping不通,看下虛擬機和213的防火牆有沒有關,而咱們的94是連不上虛擬機的,天然也就ping不通了linux

   好了,如今問題是讓94主機訪問虛擬機上的項目,這裏使用.net core項目爲例,也能夠是其餘項目,如java.python等等均可以nginx

   爲了解決這個問題,個人想法是這樣的,94能夠連上213,而213能夠連上虛擬機129,那麼能夠在213主機上作一個反向代理,讓請求轉發到虛擬機上,有了這個思路,咱們就能夠下手了shell

  1、安裝dotnet,運行.net core項目json

  若是是java,就是安裝JDK,若是是python就是安裝python的編譯器了,dotnet的SDK安裝能夠參考我以前的博客:http://www.javashuo.com/article/p-scpysaou-kd.htmlvim

  

  dotnet安裝好以後,咱們能夠先運行.net core項目,若是沒有,能夠直接生成一個:windows

  輸入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

  2、使用nginx作反向代理

   nginx的安裝能夠參考個人博客:http://www.javashuo.com/article/p-qthlzyyw-kc.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/訪問了

 

     

  3、使用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

   最後畫張圖示意:

  

相關文章
相關標籤/搜索