开发里最常见的混淆不是“127.0.0.1 和 0.0.0.0 哪个更高级”,而是没有分清它们分别表示“发给谁”或“监听谁”。简单说:
127.0.0.1是回环地址,请求只回到当前机器localhost通常解析到回环地址0.0.0.0在服务端绑定时表示监听所有可用网卡
这也是为什么你本机能打开服务,手机或同网段另一台电脑却访问不到。
目录
- 127.0.0.1 是什么
- localhost 和 127.0.0.1 是一回事吗
- 0.0.0.0 在服务端代表什么
- 为什么“本机能打开,别人打不开”
- hosts 文件里为什么有人写 127.0.0.1,有人写 0.0.0.0
- 客户端里 0.0.0.0 不是正常目标地址
- 一个判断公式
- 结论
- 参考资料
127.0.0.1 是什么
127.0.0.1 属于 IPv4 loopback 范围,发给它的请求不会出当前机器,而是直接绕回本机网络栈。
常见用途:
- 测本地 Web 服务
- 测数据库、Redis 等本机依赖
- 在
hosts文件里把某个域名重定向回本机
curl http://127.0.0.1:3000
如果服务只监听在 127.0.0.1,那么局域网其他设备通常无法访问。
localhost 和 127.0.0.1 是一回事吗
大多数开发场景里可以近似这么理解,但严格说不是同一个概念:
localhost是主机名127.0.0.1是 IPv4 地址
系统会通过 hosts 或 DNS 解析把 localhost 指向回环地址,很多机器上也可能同时有 IPv6 的 ::1。
所以当你写:
curl http://localhost:3000
最终访问的通常仍是本机回环接口。
0.0.0.0 在服务端代表什么
服务端绑定 0.0.0.0 时,意思通常是“监听当前机器所有可用网络接口”:
python -m http.server --bind 0.0.0.0 8080
这意味着:
- 本机可通过
127.0.0.1:8080访问 - 局域网设备也可能通过机器真实 IP 访问
- 是否真的能从外部访问,还取决于防火墙、端口映射、容器网络和反向代理
为什么“本机能打开,别人打不开”
最常见原因是服务只绑定在回环地址:
服务监听 127.0.0.1:3000
此时浏览器在本机访问没问题,但局域网其他设备访问 192.168.x.x:3000 会失败,因为服务根本没挂在那张网卡上。
如果改成:
服务监听 0.0.0.0:3000
它才有机会接收来自其他网卡的连接。
这和 Docker 场景经常一起出现。容器内监听、宿主机端口映射、Nginx 反向代理是三层不同问题,不要混为一谈。容器内绑定差异可以继续看 Docker 中 localhost 与 0.0.0.0 的区别,代理层见 反向代理与 Nginx 指南。
hosts 文件里为什么有人写 127.0.0.1,有人写 0.0.0.0
两种都能用来阻止某些域名访问,但含义和行为不完全一样。
127.0.0.1 example.com
0.0.0.0 ads.example.com
通常的经验是:
127.0.0.1:把请求导向本机回环0.0.0.0:更像让请求尽快失效,不再尝试有效远端目标
不过这里的具体表现还会受浏览器、系统解析和协议影响,所以更适合把它当成“用途倾向”,而不是所有平台都完全一致的绝对结果。
客户端里 0.0.0.0 不是正常目标地址
开发者容易把“服务监听 0.0.0.0”和“浏览器访问 0.0.0.0”混成一件事。前者常见且有效,后者通常不是你真正该输入的访问地址。
服务监听:
0.0.0.0:3000
客户端访问时,一般还是用:
127.0.0.1:3000localhost:3000192.168.x.x:3000- 真实域名
一个判断公式
你可以这么记:
- 想访问自己:看
127.0.0.1/localhost - 想让服务接所有入口:绑定
0.0.0.0 - 想让别的设备访问你:不仅要绑定
0.0.0.0,还要检查端口、防火墙和网络路径
结论
127.0.0.1是本机回环地址。localhost通常会解析到回环地址,但它本质是主机名。0.0.0.0在服务端绑定时表示监听所有可用网络接口。- “本机能访问、外部不能访问”时,先查监听地址,再查防火墙和代理。
参考资料
继续阅读
硬链接(Hard Link)技术概述
在文件系统中,每个文件都会有一个 inode,该 inode 存储了文件的元数据(如文件大小、权限等)以及文件数据在磁盘上的位置。当你创建一个硬链接时,操作系统并不会复制文件的数据内容,而是为文件创建一个新的目录项(即一个新的文件名),并将其指向原文件的 inode。并不直接包含
9 分钟Linux 常用命令:文件、进程、网络速查
按文件目录、文本查看、进程排查、网络连接和环境变量五类整理 Linux 常用命令,重点讲开发与运维里最常见的 ls、cd、cp、mv、rm、find、ps、top、curl、ssh、ip。
12 分钟Docker 常用命令:容器、镜像、日志与清理
按实际排障流程整理 Docker 容器、镜像、日志、网络、数据卷和磁盘清理命令,解释 run、exec、logs、inspect 与 prune 的使用边界。
订阅 FreeMac
每周精选:免费 Mac 软件评测、可信来源更新、替代方案和少折腾指南。