目的为了实现主机和虚拟机的通信,访问虚拟机中架设的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。大功告成。

[linux]主机访问虚拟机web服务(CentOS)的更多相关文章

  1. 主机访问 虚拟机web注意事项

    在这里, 我通过NAT的方式, 通过主机访问虚拟机. 需要做的是, 将主机中访问的端口, 映射为虚拟机的'编辑->虚拟网络编辑器->vmnet8', 如下图 在弹出的'映射传入端口'界面中 ...

  2. 主机连接虚拟机 web服务

    主机上安装了个VM centeros 首先通过 终端:ifconfig eth0 查看虚拟机的Ip地址 这样就能在主机上通过浏览器http://192.168.150.128/a.php 访问虚拟机的 ...

  3. 通过公网ip访问虚拟机web服务

    工作中有需要进行通过外网ip访问虚拟机上的web服务,通过查阅资料,将配置过程整理如下: 思路:通过路由器的端口映射访问虚拟机上的web服务 1. 前提是在虚拟机上的web服务已经部署好,并且可以通过 ...

  4. 主机不能访问虚拟机web服务的问题

    虚拟机是CentOs 7 iptables -Fiptables -P INPUT ACCEPT 参考:http://blog.csdn.net/abnereel/article/details/41 ...

  5. centos7无法访问虚拟机web服务

    第一种: 先看下防火墙状态:firewall-cmd --state 关闭防火墙再试试:systemctl stop firewalld.service 第二种,不想关闭防火墙 放开http服务 fi ...

  6. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  7. 在虚拟机上搭建物理机可访问的web服务(IIS)

    0x0 前言 安装webug4.0的时候突发奇想,想学下如何在虚拟机里搭建网站,然后让主机像访问互联网的网站一样访问虚拟机的网站,为以后渗透测试搭建环境做准备 0x1 虚拟机安装win2003[以防万 ...

  8. 主机访问虚拟机centos7的服务器

    一.虚拟机开启桥梁接 1.编辑-->虚拟网络编辑器 2.虚拟机-->设置 二.Centos的配置---关闭防火墙下的服务器接口 Centos7.0 默认使用firewall作为防火墙,这里 ...

  9. 外网主机访问虚拟机下的web服务器(NAT端口转发)

    主机:系统win7,ip地址172.18.186.210 虚拟机:VMware Workstation 7,虚拟机下安装了Centos操作系统,ip地址是192.168.202.128,部署了LAMP ...

随机推荐

  1. 前端ajax请求百度地图api

    $.ajax({ type: "get", url: 'http://api.map.baidu.com/place/v2/search', data:{ ak:'您的ak', q ...

  2. 【CH4302】Interval GCD

    题目大意:给定一个长度为 N 的序列,M 个操作,支持区间加,区间查询最大公约数. 题解: 先来看一个子问题,若是单点修改,区间最大公约数,则可以发现,每次修改最多改变 \(O(logn)\) 个答案 ...

  3. 转:centos 7 安装音频视频解码器

    (原文:https://blog.csdn.net/zhou1519/article/details/39035233/) 1.安装额外的软件源epel和nux-dextop rpm -Uvh htt ...

  4. Python的编码和解码

    Python的编码和解码 在不同的国家,存在不同的文字,由于现在的软件都要做到国际化通用,所以必须要有一种语言或编码方式,来实现各种编码的解码,然后重新编码. 在西方国家,没有汉字,只有英文,所以最开 ...

  5. Python中查看函数相关文档

    1.dir查看对象属性 >>> dir(set) ['__and__', '__class__', '__contains__', '__delattr__', '__dir__', ...

  6. MessageFormat的用法,java动态替换String字符串中的占位符

    import java.text.MessageFormat; import java.util.GregorianCalendar; import java.util.Locale; public ...

  7. PageRank算法--从原理到实现

    本文将介绍PageRank算法的相关内容,具体如下: 1.算法来源 2.算法原理 3.算法证明 4.PR值计算方法 4.1 幂迭代法 4.2 特征值法 4.3 代数法 5.算法实现 5.1 基于迭代法 ...

  8. Python DB operation

    mysql http://www.cnblogs.com/zhangzhu/archive/2013/07/04/3172486.html 1.连接到本机上的MYSQL.首先打开DOS窗口,然后进入目 ...

  9. MYSQL实战

    基础架构 更新操作 日志模块 redo log 和 binlog 两阶段提交: prepare commit 事务隔离 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据 ...

  10. laravel 跨库执行原生 sql 语句

    执行原生 sql 返回结果集