[linux]主機訪問虛擬機web服務(CentOS)


目的為了實現主機和虛擬機的通信,訪問虛擬機中架設的web服務。
按理說通過虛擬機ip + web服務端口,即可在瀏覽器訪問虛擬機的web服務。
但是由於CentOS的防火牆問題,對應web端口無法訪問。通過配置CentOS防火牆來解決。

CentOS 7使用firewalld來管理防火牆,firewalld的配置不了解,切換為比較通用的iptables配置。
關閉firewalld並啟用iptables服務:
  systemctl mask firewalld
  systemctl stop firewalld
  yum install iptables-services
  systemctl enable iptables
  systemctl start iptables

通過systemctl status firewalld.service可以查看firewalld處於dead狀態。此時防火牆由iptables接管。

iptables的配置詳情參考這里:
http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.html
  • 查看iptables端口列表:
  iptables -L -n
  • iptables開放80端口:
  iptables -A INPUT -p tcp --dport 80 -j ACCEPT
之前碰到過在命令行添加端口開放,但查看iptables -L -n卻發現沒有生效的問題。於是直接修改配置文件/etc/sysconfig/iptables。文件中有開放ssh 22端口的配置,復制相關命令行,將端口部分變更為80.
修改之后重啟iptables: service iptables restart

通過主機telnet虛擬機,驗證端口是否開放。
我的vmware虛擬機網絡配置為NAT。
首先查看虛擬機分配到的ip地址:ifconfig

此處虛擬機的地址為192.168.151.131.
首先確認主機ping虛擬機能ping通: ping 192.168.151.131.
如果ping不通,說明地址或網絡有問題。導致不通的原因很多,請自行搜索解決。

然后在主機telnet 虛擬機端口: telnet 192.168.151.131 80
如果有提示telnet命令不存在的情況,表示主機沒有開啟telnet服務。
在控制面板->程序->啟用或關閉Window功能,找到telnet客戶端,勾選之后提示重啟生效。保存相關環境,然后重啟。
現在win10的控制面板入口十分隱蔽,我一般通過資源管理器左側,[此電腦]圖標右鍵,選擇屬性,在彈出的窗口中找到控制面板。

如果telnet成功,則cmd會進入一個空白的界面,按ESC鍵退出會顯示一些錯誤信息。表示虛擬主機是可連接的,配置成功。通過瀏覽器訪問ip+端口,應該可以進入web服務。

如果telnet不成功,原因依然很多。
有一種說法是selinux本身也有防火牆, 通過setenforce 0命令關閉。個人實測selinux的開啟/關閉並不影響端口接通。
另一種說法是主機防火牆問題,可以自行開關主機防火牆確認。在我的案例中,問題也與主機防火牆無關。
我的問題在於沒有啟動監聽80端口的web服務。
這里我的疑問是,如果端口沒有服務監聽,為什么是拒絕連接,而不是操作系統返回信息提示端口背后無服務?

我配置的是nginx+uwsgi的Flask web,通過nginx啟動服務。
如果配置正確,通過netstat -ntpl可以查看到端口80和nginx服務的相關信息。
再次在主機telnet 虛擬機地址端口, 進入空白終端,esc退出有HTTP 400提示。表示端口服務OK。
盡管我並沒有使用uwsgi app.py來運行虛擬機的app, web服務依然OK。所以推測在啟動nginx服務后,nginx已經通過配置,調用uwsgi啟動了對應的app服務,無需手動開啟。
通過瀏覽器訪問ip+端口,返回我配置好的Hello World。大功告成。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM