在ubuntu上通过nginx + uwsgi 运行 flask

安装nginx:

apt-get install nginx
#如果是使用本机安装测试,由于默认不是最高权限使用以下命令即可:
sudo apt-get install nginx 

安装uwsgi:

linux 安装:
apt-get install build-essential python-dev
pip install uwsgi
#查看是否安装成功
uwsgi --version

配置nginx:

cd /etc/nginx/conf.d
vim conf_name.conf <创建一个配置文件,名字随便起>
#如果没有权限 切记:
sudo vim conf_name.conf

nginx配置内容:

server { 
   listen
80; #监听服务器的80端口 server_name 127.0.0.1; #你的域名,前提是你要将你的域名解析到你的服务器的ip地址 charset utf-8; location / { include /etc/nginx/uwsgi_params; #添加uwsgi参数 uwsgi_pass 127.0.0.1:5000; #你的Flask应用运行端口,和上面的对应
    # uwsgi_param UWSGI_CHDIR /flask; //项目根目录
# uwsgi_param UWSGI_SCRIPT manage:app; //启动项目的主程序(在本地上运行
//这个主程序可以在flask内置的
//服务器上访问你的项目)
     #
     # harakiri-verbose = true
# harakiri = 300 # 堵塞排队等候的进程数量
# post-buffering = 65536 # 不设置会导致上传大文件失败
# buffer-size = 65536
}
} }
# *注:公司的服务器可能需要对外开放 80 端口才能实现本地远程访问

#!!! 天坑 nginx 配置后有个自带的配置 一定要关掉/etc/nginx/sites-enabled 的 default 文件里面的 server 都 注销掉 !!!
注销掉 !!! 注销掉 !!!

配置nginx.config文件

cd /etc/nginx
sudo vim nginx.config
# 这个修改的是nginx的本身的一个配置 这个配置是为了在2核4g机器的上尽可能的多做一些转发 所以手动配置了超于内核数2被的线程, 具体参数可以参考:https://www.cnblogs.com/presleyren/p/15772096.html

user www-data;
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
        use epoll;
    worker_connections 65535;

    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    # server_tokens off;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # SSL Settings
    ##

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    ssl_prefer_server_ciphers on;

    ##
    # Logging Settings
    ##

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    ##
    # Gzip Settings
    ##

    gzip on;

    gzip_vary on;
    gzip_proxied any;
        gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    ##
    # Virtual Host Configs
    ##

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}


#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
#
#    # auth_http localhost/auth.php;
#    # pop3_capabilities "TOP" "USER";
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#    server {
#        listen     localhost:110;
#        protocol   pop3;
#        proxy      on;
#    }
#
#    server {
#        listen     localhost:143;
#        protocol   imap;
#        proxy      on;
#    }
#}

 

配置uwsgi:

[uwsgi]
;如果报错 -- unavailable modifier requested: 0 -- 打开这行试试
;plugins = python3 # socket = 127.0.0.1:5000 #如果要改端口,记得和上面nginx配置的uwsgi_pass 端口一定要一致 socket = 0.0.0.0:5000 #监控公网 ;将Flask应用运行在这个端口 master = true wsgi-file = main_app.py # flask项目的文件名字 ;后端文件名称 callable = app ;设置在收到请求时,uWSGI加载的模块中哪个变量将被调用,默认是名字为“application”的变量。即是: app = Flask(__name__) processes = 8 threads = 2 daemonize = server.log ;日志保存文件名称 【位置默认在app.ini 目录下】 harakiri-verbose = trueharakiri = 300 # 堵塞后链接进程的缓存数量
post-buffering = 65536 # 不设置会导致上传大文件失败
buffer-size = 65536
;post-buffering=131072 # 128K
;post-buffering-busize=65536 # 64K
pidfile = uwsgi.pid

启动Nginx

# 如果以及启动可以直接重启
service nginx start #启动nginx
#或则 service nginx restart 重启nginx# 平滑重启 切刀nginx的目录下
nginx -s reload
# 注意的坑:
lient_max_body_size 500m;

web服务器提示Request Entity Too Large” (413),client_max_body_size,默认1m

另外,其他几个参数也要注意:
nginx.conf
#keepalive_timeout 60;
#send_timeout 3m;
client_max_body_size 500m;

启动uwsgi

#通过uwsgi配置文件启动 flask
uwsgi <自己命名的写好uwsgi配置的文件名>.ini
或者
uwsgi -d --ini test.ini # <自己命名的写好uwsgi配置的文件名>.ini
uwsgi --ini uwsgi.ini
# 结束进程任务
uwsgi --stop uwsgi.pid
# 暴力杀死
sudo pkill -f uwsgi -9
# 重启 uwsgi
uwsgi --reload uwsgi.pid
#查看进程
ps aux | grep uwsgi

 

posted @ 2021-12-14 17:54   ̄□ ̄  阅读(159)  评论(0编辑  收藏  举报