关于网络服务器localhost 或者 127.0.0.1 识别http协议,但是主机Ip不识别的常见原因分析

本文介绍了解决外网无法访问局域网内正在建设的交易网站的问题。通过排查防火墙设置、路由器端口映射及服务器配置等问题,最终实现了外网用户的正常访问。

如题所说,今天突然心血来潮想让外网的朋友看一下我的真在建设中的交易网站,但是遇到很尴尬的事情发生了,朋友无法访问!

于是百度 google上搜,帖子不多,而且没有比较详细的,于是自能自己找解决办法。在N分钟过后,朋友可以访问我的主机网络服务器,于是把这些经验跟大家分享一下,希望有点帮助

 

首先说明一点,由于网络服务器的选择不同,配置可能有些差异,但是思路肯定都是一样的

 

如果说localhost 或者 127.0.0.1 也不行,那肯定是服务器的配置问题,还是想看看使用说明让这2个可行再看我下面的内容

 

原因:因为localhost 跟 127.0.0.1都指的是同一主机,并没有牵连到局域网或者外网,所以只要网络服务器设置Ok就应该可以运行

 

那有哪些可能影响局域网或者外网的http协议的传输呢?

1.很可能是系统装有 防火墙 软件,如果它过滤了所有来自外网的http请求,那肯定是不可能成功的。因此,建议可在短时间内关闭所有防火墙 (360,win自带防火墙,杀毒软件等)

2. 可能你也用的是运营商的路由器,所以如果想让外网的人能直接连到你的主机,首先关闭路由器的防火墙 ,然后创建一个端口给这台主机:

比如我的网络服务器运行在192.168.1.10 的 8080 端口上,那么需要在路由器上添加一个 NAT 规则,http 协议 - 外网端口默认80 - 内网端口 8080 - 内网主机ip 192.168.1.10

3. 如果设置都Ok应该没问题了,可以在主机上线测试一下 http://192.168.1.10 如果成功,那在外网应该也ok了

当然外网使用的 url 应该是你的路由器的公共ip。 如果不知道的话可以google一下,比分说路由器Ip是 13.12.12.12,那外网用户就必须得用  http://13.12.12.12 来访问咯

 

4. 如果还是不行,那10有八九还是网络服务器的设置问题。 比分说用 tomcat 基本默认已识别 ip,但是我在用 Gae + Eclipse,然后直接运行Eclip的网络程序发现只能支持 localhost。 后来找了 gae的官网,说以 eclipse 直接运行的话是默认的,也就是只认识 localhost。 解决办法: 下载 Gae的 jdk,然后在bin里有个(Windows下) dev_appserver.cmd的命令, 可以以这样的命令来运行部署服务器

 dev_appserver.cmd  -a 192.168.1.10  -p 8080

 

 

如何还有问题,那就说声  Merde 吧

可以给我留言,如果需要帮助的话

### 修改 IP 地址为 127.0.0.1 的可行性分析 通常情况下,`127.0.0.1` 是一个特殊的保留地址,用于表示本地回环接口(loopback interface),它并指向实际的物理网络设备[^1]。因此,无法将本机的实际 IP 地址设置为 `127.0.0.1`,因为这会违反网络协议的设计初衷。 然而,如果目标是让某些应用程序或服务识别并绑定到 `127.0.0.1`,可以通过调整配置文件来实现这一需求。以下是具体的方法: --- #### 方法一:修改主机名解析文件 在大多数操作系统中,`localhost` 默认被映射到 `127.0.0.1`。此映射存储在一个名为 `hosts` 的文件中。可以通过编辑该文件来确保特定域名始终解析为 `127.0.0.1`。 ##### Windows 平台操作步骤: 1. 打开记事本或其他文本编辑工具。 2. 使用管理员权限打开位于 `C:\Windows\System32\drivers\etc\hosts` 的文件。 3. 添加或确认存在如下一行记录: ``` 127.0.0.1 localhost ``` ##### Linux 或 macOS 平台操作步骤: 1. 编辑 `/etc/hosts` 文件,命令如下: ```bash sudo nano /etc/hosts ``` 2. 确认文件中有以下内容: ``` 127.0.0.1 localhost ``` 完成以上更改后保存文件即可生效。 --- #### 方法二:应用层绑定至 `127.0.0.1` 许多软件支持手动指定监听地址。例如,在运行 Web 应用程序时,可以选择仅绑定到 `127.0.0.1` 而对外暴露。下面是一个 Python 示例代码片段展示如何实现这一点: ```python from http.server import HTTPServer, BaseHTTPRequestHandler class SimpleRequestHandler(BaseHTTPRequestHandler): def do_GET(self): self.send_response(200) self.end_headers() self.wfile.write(b'Hello from local server!') if __name__ == "__main__": server_address = ('127.0.0.1', 8080) # 绑定到 loopback 接口 httpd = HTTPServer(server_address, SimpleRequestHandler) print("Serving on port 8080...") httpd.serve_forever() ``` 上述脚本启动的服务只会响应来自同一机器上的请求,而会接受外部访问尝试。 --- #### 方法三:虚拟化环境中的特殊处理 当涉及 Android 模拟器或者 Apache 服务器这样的场景时,可能需要额外注意两者之间的通信方式[^2]。假设模拟器与服务器处于同子网,则需明确指明数据包应发送给哪个真实 IP 地址而非试图改变默认行为去强行依赖于 `127.0.0.1`。 --- ### 总结 综上所述,虽然能直接把计算机的主要网络身份设成 `127.0.0.1`,但在很多场合下我们依然能够利用其特性满足开发测试等方面的要求。关键是理解这些概念背后的工作机制以及合理运用现有资源达成目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值