内网机器IP:172.29.30.4内网上有PHP页面(主页),http://172.29.30.4:81/index.html
内网上有TOMCAT页面(引用页),http://172.29.30.4:8080/index.jsp
index.html里iframe里引用页。<iframe src="127.0.0.1:8080/index.jsp"/>网络做了端口映射,把内网81端口映射到外网8080.1.现在在公网上通过ip:8080访问到了内网PHP页面index.html,但是应用的index.jsp不显示。
2.内网用其他机器访问ip:8080问到了内网PHP页面index.html,但是应用的index.jsp还是不显示。怎么能让页面完全显示出来?

解决方案 »

  1.   

    <iframe src="127.0.0.1:8080/index.jsp"/>
    不要写本地地址吧,换成真实ip地址。
      

  2.   

    除1楼所说的问题外,也即:
      <iframe src="127.0.0.1:8080/index.jsp"/> 
    应该修改为:
      <iframe src="172.29.30.4:8080/index.jsp"/>更大的问题是,你并没有将内网8080的端口映射到外网,当然外网就绝对访问不到Tomcat了。这个可以考虑多暴露端口映射到外网,最好考虑端口保持一致,也就是:
    外网81 <--> 内网81
    外网8080 <--> 内网8080其实:你这里面牵扯两个应用。这种情况下,一般建议装个Apache做反向代理,将应用端口等全部统一起来,并设置URL自动转换,便于外网做映射。也即是说:
    1、配置端口映射,外网8080映射到内网的80;
    2、安装Apache,开放80端口;
    3、Apache配置反向代理:按照不同虚拟目录的方式将两个应用暴露出去,比如:
    http://外网IP:8080/php/  -->  http://172.29.30.4:81/
    http://外网IP:8080/tomcat/  -->  http://172.29.30.4:8080/不过楼主估计你不太熟悉Apache,更不要说配置反向代理,所以只能供你以后参考了。
      

  3.   


    谢谢回答,推荐的Apache做反向代理我真心不懂,以后有时间再研究吧.我是这样修改的.
    1.确实要修改成172.29.30.4,这样内网的机器就可以访问到了.
    2.新暴露一个端口映射到外网,即tomcat的8080端口.保证外网上访问:外网IP:8080能看到tomcat小猫咪.
    3.加了来访IP判断,如果访问者是内网用户,iframe引用内网IP.反之,引用外网IP.js如下<script type="text/javascript" language="javascript">
    function GetLocalIPAddress()
    {
        var obj = null;
        var rslt = "";
        try
        {
            obj = new ActiveXObject("rcbdyctl.Setting");
            rslt = obj.GetIPAddress;
            obj = null;
        }
        catch(e)
        {
            
        }    
        return rslt;
    }
    var ipAddress = GetLocalIPAddress();
    if(ipAddress.indexOf("172")>-1) {
     document.getElementById("mapFrame").src="http://172.29.30.4:8080/webname/";
    }else {
    document.getElementById("mapFrame").src="http://公网IP:8081/webname/";
    }
    </script>结贴.