flask-uwsgi-nginx部署
如何使用uwsgi、nginx部署flask app
flask app
|
|
|
|
python环境为pyenv安装的Python 2.7.12
切换到特定用户(Python 2.7.12环境)
|
|
安装、使用uwsgi
|
|
wsgi
|
|
uwsgi http
|
|
使用uwsgi启动python app时,必须在guest用户下,因为只有guest用户下才有uwsgi程序和相应的flask环境,因此上面非常重要的一点是指定uid和gid为guest用户。
另外,需要修改对应目录、文件的属主数组
|
|
还有一点需要注意,坑死老子了,就是wsgi-file最好使用 绝对路径
启动
|
|
uwsgi http-socket
|
|
这里只改动了http为http-socket,依然可以通过6555端口使用http协议访问
uwsgi socket ip:port
|
|
这里修改httpsocket为socket,仍然可以通过http形式访问
|
|
uwsgi socket socket file
|
|
|
|
uwsgi + nginx
方式一
http = 127.0.0.1:6555方式启动
|
|
可以看到在启动http服务的同时也启动了一个TCP socket,
在这里,如果把Nginx的uwsgi_pass修改为127.0.0.1:56228那么client还是可以访问flask web页面的,但是如果使用默认的6555就是一个http协议的端口,Nginx无法代理。
方式二
http-socket = 127.0.0.1:6555方式启动
|
|
这种方式client访问将会出现502错误
|
|
而且uwsgi服务根本没有和Nginx产生任何的交互
那么Nginx正确的配置方式应该是使用http协议而不再是uwsgi协议
|
|
以上这种配置就能正常的访问flask web提供的服务了
方式三
socket = 127.0.0.1:6555 方式
这种方式下Nginx的配置如下:
|
|
方式四
socket = /var/run/uwsgi/uwsgi.sock方式
|
|
这里要记得修改/var/run/uwsgi/的属主数组
|
|
启动uwsgi
|
|
这种方式启动并不会开启TCP端口监听
因此Nginx的配置应该如下:
|
|
上面把uwsgi的协议方式修改为了unix socket方式
浪费了老子这么多时间,可是人家早就在文档中写好了,不冷静下来看文档也就只能到处搜一下乱七八糟千篇一律浪费时间的玩意儿。
The
http-socket
option will make uWSGI natively speak HTTP. If your web server does not support the uwsgi protocol but is able to speak to upstream HTTP proxies, or if you are using a service like Webfaction or Heroku to host your application, you can usehttp-socket
. If you plan to expose your app to the world with uWSGI only, use thehttp
option instead, as the router/proxy/load-balancer will then be your shield.
人家都说了要么使用socket方式,要么使用http-socket+http方式,要么使用uwsgi裸奔,浪费我时间。
另外,还有一点是uwsgi有的时候也会产生core文件哦~