1.为什么要Nginx ?
Nginx是一个Http和反向代理服务器
什么是反向代理服务器呢?
正向的就是由浏览器主动的想代理服务器发出请求,经代理服务器做出处理后再转给目标服务器
反向的就是不管浏览器同不同意,请求都会经过代理服务器处理再发给目标服务器
这其中的区别就是必须经过Nginx反向代理服务器,这就有了使用Nginx的几个好处:
安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器
负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能
提高web服务器的IO性能:这个我也没看懂,总结来说就是请求从客户端传到web服务器是需要时间的,传递多长时间就会让这个进程阻塞多长时间,而通过反向代理,就可以在反向代理这完整接受请求,然后再传给web服务器,从而保证服务器性能,而且有的一些简单的事情(比如静态文件)可以直接由反向代理处理,不经过web服务器
2.nginx和uwsgi的关系
nginx相当于是服务器,负责接收请求
uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回
2个基本概念:
服务器(接收请求),应用程序(处理请求并返回)
通信过程:
客户端发送一个http请求,被nginx服务器接收,nginx服务器将请求转发给uwsgi,uwsgi将请求转发给实现uwsgi协议的应用程序(flask,gunicorn等等)
3.flask
4.uwsgi 配置
[uwsgi]
chdir=/home/long/features_api # 我们项目的根目录,即 run.py 所在文件夹
home=/home/long/python-env/api
http=:9090
wsgi-file=server.py
master=true
processes=4
threads=2
stats=127.0.0.1:9191
callable=app
master=true
socket=%(chdir)/api.sock
chmod-socket=666
logfile-chmod=644
daemonize=%(chdir)/uwsgi.log # 指明了 uwsgi 日志目录,uwsgi 会将请求历史写入该文件。
processes = 4 说明要启动4个子进程处理请求;
socket = /path/to/sock/myproject.sock 是 uwsgi 启动后所需要创建的文件,这个文件用来和 Nginx 通信,后面会在配置 Nginx 时用到,所以 chmod-socket = 660 是为了修改 .sock 文件权限来和 Nginx 通信;
5.nginx 配置
vi /etc/nginx/nginx.conf
在http 里添加如下内容(注意不可用TAB键,否则会报错 此为20190926更新)
server {
listen 80;
server_name 0.0.0.0;
location / {
include uwsgi_params;
uwsgi_pass unix:/root/test/gupiao/api.sock;
uwsgi_param UWSGI_CHDIR /root/test/gupiao;
uwsgi_param UWSGI_SCRIPT manage:run;
}
}
下面为之前的版本
只个修改红色方框中的即可。
可用 nginx -t
查看配置文件是否有错。
6.运行
在启动nginx时,如果发现报错"98:Address already in use",不要着急,很有可能是因为你的nginx已经启动了。
通过 netstat -ntlp 查看端口占用情况,看看是不是你的nginx占用的80端口。如果发现有其他程序占用了nginx的默认的80端口,可以杀掉这些进程,再启动nginx。
到此,我们终于完成了所有的工作,马上就可以访问自己的项目了。
现在,检查一下nginx的配置文件是否应用 nginx -t 没有成功应用的话,检查一下配置文件。
键入 nginx 来启动nginx
键入uwsgi uwsgiconfig.ini 启动uwsgi
这时uwsgi会告诉你你的项目是否有错误,如果本地运行良好,一般是没有错误的。
有可能会报的错是项目相关模块的引入路径不对,修改一下便可。没有报错的话,打开浏览器,输入你的服务器IP地址,或者如果你有相应的域名,并解析到了你的IP,输入域名也可以。
如果一切顺利的话,显示的就是你想要的页面了,如果不是,首先查看一下日志文件,他们在你的项目根目录下logs文件夹里。