127.0.0.1 与 0.0.0.0的区别

在部署Flask应用到服务器器上时发现一个很有趣的现象,服务器内部,nginx与uwsgi利用127.0.0.1进行通信,为了方便比较,将nginx与uwsgi的配置代码拿出来比较。

Uwsgi

1
2
3
4
5
6
7
8
9
10
[uwsgi]
socket= 127.0.0.1:3031 #作为内部地址,供nginx和uwsgi使用
master = true
home = venv #虚拟环境名称
wsgi-file = manage.py #项目的启动文件
callable = app # Flask 的application类
processes = 4
threads = 2
buffer-size = 32768
stats = 127.0.0.1:9191 #状态检测地址


Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 80 ;
server_name 115.159.213.132; #云空间ip地址(外网ip)
location / {

include uwsgi_params;
uwsgi_pass 127.0.0.1:3031; # 指向uwsgi 所应用的内部地址,所有请求将转发给uwsgi
uwsgi_param UWSGI_PYHOME /home/ubuntu/flask_test/venv; #虚拟环境目录
uwsgi_param UWSGI_CHDIR /home/ubuntu/flask_test; #网站根目录
uwsgi_param UWSGI_SCRIPT manage:app; #启动程序名称
uwsgi_read_timeout 100;
}

}

在这两个配置文件中,Uwsgi中的socket一定要与Nginx中的uwsgi_pass一样。Nginx与Uwsgi利用该地址进行通信。Uwsgi再与应用进行通信。如果要手动启动Flask应用,需要指定host为 0.0.0.0

1
python manage.py runserver --host 0.0.0.0

这时可以通过访问 [服务器ip]+端口号(默认是5000)访问应用。如果是以127.0.0.1方式启动,则无法访问该应用。

何为 127.0.0.1

127.x.x.x 都成为本地回环地址,一般用于本地测试,相当于把本地的电脑当作一个服务器,则这个服务器的ip地址为127.0.0.1,通过访问该服务器(必要时需加上端口号)上运行的web应用或其它应用。 而对于数字,一般很难记忆,于是人们便发明出一种叫做DNS的技术,将那些难记的ip地址与各种域名绑定到了一起,基于这个原理,一般linux或window都在host文件中将Localhost 这个域名绑定到127.0.0.1 上。顺便再聊一下咱们一般访问某个域名时,电脑所做的工作,当我们在浏览器上访问某个网址时,电脑现在本地的host文件中查找是否有与该域名绑定的ip地址,若有则直接访问该ip地址,否则需要向外网去求助,取得该域名所对应的ip地址。(这就是DNS解析的大致步骤),故如果在我们本地开发某个web应用,我们可以通过修改Host文件来达到输入域名来访问本地Web应用的目的。

何为 0.0.0.0

在IPV4中:
服务器中:0.0.0.0代表本机全部的IPV4地址,如果该服务器上有两个ip地址,而且服务器上的某一个服务其监听的地址是0.0.0.0,则通过访问这两个ip地址都可以访问该服务。
路由器:表示默认路由, 当在路由表上没有找到合适的路由时,所对应的路由

总结

127.0.0.1使用在开发环境(本地), 0.0.0.0使用在发布环境(云主机)。

参考资料

本文标题:127.0.0.1 与 0.0.0.0的区别

文章作者:定。

发布时间:2017年3月11日 - 12时03分

本文字数:1,392字

原始链接:http://cocofe.cn/2017/03/11/127.0.0.1 与 0.0.0.0的区别/

许可协议: Attribution-NonCommercial 4.0

转载请保留以上信息。