本文共 1463 字,大约阅读时间需要 4 分钟。
我们都知道什么是app, 就是手机上的一个软件,点开就有很多功能可以使用,这种类型的软件我们称之为“移动应用“(mobile application);而当你打开浏览器浏览各种网页、进行各种操作的时候,你就是在使用网络应用(web application). 网络应用的很多功能依赖于和服务器的交互,大致的过程是你通过浏览器里看到的页面请求一些信息,然后浏览器告诉操作系统:“你帮我对ip地址是xxx.xxx.xxx.xxx的那台机器说xxxxxpaidsjlkfnad9130p5up@%$@WERGSDFXvcsdoij这些话,它回你什么你都告诉我“,操作系统空下来就帮浏览器传话了,收到回复以后也告诉了浏览器;最后浏览器阅读了收到的回复,组织了一下语言再呈现给你看。
一个服务器就是一台一直开着的电脑,也有CPU、内存、硬盘、主板这些东西。上述的过程有一个步骤是操作系统要向ip为xxx.xxx.xxx.xxx的机器传话,这台机器要能收到消息必须“在线“,所以服务器必须24小时开启。
一般网络应用在开发阶段会通过 localhost:[port]
来访问,这时候开发人员只要保证应用能监听 localhost
即可,但是当应用部署到服务器上,开始24小时提供服务的时候,继续把监听范围仅限于 localhost
就不行了。监听 localhost
的意思是该应用允许访问的用户只有本机,也就是说自己跟自己玩它才愿意,换了生人就不玩了。要让它成为一个正经的网络应用,它需要允许“公共网络接口“ 0.0.0.0
也就是所有 ip 地址的连接。
我们来看一个 Flask
的例子,下面的代码片段给出一个最精简的 Flask 应用:
from flask import Flaskapp = Flask(__name__)@app.route('/')def index(): return 'Hello!'if __name__ == '__main__': app.run(debug=True)
运行之后 Flask 只会允许localhost的连接,监听5000端口,如果把这个应用在服务器上运行,然后尝试通过 ip 地址访问就会失败;应该要让 Flask 允许公共网络接口的连接,使用 flask-manager:
from flask import Flaskfrom flask_script import Managerapp = Flask(__name__)@app.route('/')def index(): return 'Hello!'if __name__ == '__main__': manager.run()
将代码片段保存为 app.py
, 然后使用 python app.py runserver --host 0.0.0.0
来启动服务器,这次能够通过 ip 地址访问。
网络上的请求是很复杂的,有人将 www 戏称为(wild weird web),一般的网络应用框架在设置白名单、黑名单、代理、重定向方面不如Nginx有效率,所以一般的后端架构都有一个 Nginx 做为中介来转发用户的请求,比如要把某个 url 的请求转发给flask应用的话就要在 Nginx 的配置文件中写:
location /yoururl { proxy_pass http://localhost:5000;}
转载地址:http://mfpmb.baihongyu.com/