ubuntu nginx初探(一)

我们可以用uwsgi来部署Flask项目,或者单独部署Flask,那么我们为什么还要使用Nginx + uwsgi来部署呢?
使用Nginx有如下一些优点:

安全:不管什么请求都要经过代理服务器,这样就避免了外部程序直接攻击web服务器
负载均衡:根据请求情况和服务器负载情况,将请求分配给不同的web服务器,保证服务器性能
提高web服务器的IO性能:对于一些静态文件,可以直接由反向代理处理,不经过web服务器

NGINX

#安装
sudo apt-get install nginx

#测试是否安装成功
sudo nginx -t

#查看版本
nginx -v

#Nginx 查看状态|停止|运行|重启
service nginx status|stop|start|restart
(也可以用ps-aux去查看所有进程)

nginx文件结构

/usr/sbin/nginx/  #主程序
/etc/nginx/       #配置文件
/usr/share/nginx/ #静态文件
/var/log/nginx/   #日志文件

退出与动态更新配置

#优雅退出nginx
sudo nginx -s quit

#强制退出
sudo service nginx stop

#启动nginx
sudo service nginx start 

#动态加载配置(可在不断开的情况下重新加载新配置)
sudo nginx -s reload

UWSGI:

#对wsgi , uwsgi的说明
https://www.cnblogs.com/wspblog/p/8575101.html

#conda下安装uwsgi
#不要直接用pip方式,会报错,用如下命令:
conda install -c conda-forge uwsgi
conda install -c conda-forge libiconv

#查看uwsgi版本及测试是否成功
uwsgi --version


#单独测试uwsgi
生成一个test.py,内容如下:
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b'Hello World From My Uwsgi prprpr']
然后再外面:
uwsgi --http :8080 --wsgi-file test.py
在浏览器输入127.0.0.1:8080,查看是否正确打开


#查看uwsgi进程
ps -ef | grep uwsgi

#关闭uwsgi
sudo pkill -f uwsgi -9

 FLASK

测试代码
OnlyFlask.py   :



from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return"<h1>I'm Flask miaomiaomiao</h1>"

if __name__ == "__main__":
    app.run(host='0.0.0.0',port=8888)
扫描二维码关注公众号,回复: 9393336 查看本文章

使用uwsgi部署Flask项目

直接使用命令行去部署:

uwsgi --socket 0.0.0.0:5555 --protocol=http -p 3 -w OnlyFlask:app
说明:
--socket 0.0.0.0:5555  指定暴露端口号为5555
--protocol=http  说明使用 http 协议,即端口5555可以直接使用HTTP请求进行访问。
-p 3表示启动的服务占用3个进程。
-w OnlyFlask:app:-w 指明了要启动的模块,OnlyFlask就是项目启动文件OnlyFlask.py去掉扩展名,app是OnlyFlask.py文件中的变量 app,即 Flask 实例。




编写配置文件部署:
项目目录(其实在哪生成都行,项目路径是在下面配置的)下生成uwsgi.ini,内容如下:

[uwsgi]
# 程序启动文件
wsgi-file = RunFlask.py
# 程序内启动 application 的变量名
callable = app 
# 处理器数
processes = 2
# 线程数
threads = 4
# 项目路径地址
chdir = /home/vinsuan/code/Time/2019_12/Online_Face_Server
# socket连接方式
socket = 127.0.0.1:9009
# socket权限
chmod-socket = 660
# log地址
logto = /home/vinsuan/code/Time/2019_12/Online_Face_Server/log/uwsgi_log.log
# 当服务停止的时候,自动移除unix Socket 和 Pid 文件
vacuum = true

#protocol = http




之后在命令行输入:
uwsgi --ini uwsgi.ini
(正式使用应该用nohup uwsgi --ini uwsgi.ini &)
即可启动成功
说明:
- processes相当于之前的-p参数;

如果我们没有添加 protocol = http,那此时我们暴露的端口不能使用HTTP请求直接访问,需要经过Nginx进行反向代理。

NGINX反向代理FLASK

修改/etc/nginx/sites-enabled/default如下:

********************START*****************************


server {
listen 80;                    #服务器监听端口
server_name 192.168.1.64;        #公网IP
charset utf-8;                #编码
client_max_body_size 75M;  # 之前写的关于GET和POST的区别,这里应该是原因之一吧

location / {
    include uwsgi_params;         # 导入uwsgi配置
    uwsgi_pass 127.0.0.1:9009;    # 转发端口,需要和uwsgi配置当中的监听端口一致
    uwsgi_param UWSGI_PYTHON /home/vinsuan/anaconda3/envs/tf36/bin; #python
    uwsgi_param UWSGI_CHDIR /home/vinsuan/code/TEMP/TestNginx/;  #项目根目录
    #uwsgi_param UWSGI_SCRIPT OnlyFlask:app;    # 和Flask以及其中实例一致
    }
}

*******************END*********************************



然后使用如下命令启动nginx:
service nginx start
再手动启动uwsgi后,就可以在192.168.1.64那里看到页面了
发布了161 篇原创文章 · 获赞 71 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/yxpandjay/article/details/103574633
今日推荐