Nginx转发由uWSGI托管的Flask程序

1.预设的目录结构

│  .gitignore
│  README.en.md
│  README.md
│  txt.txt
│  
├─api_invcloud
│      mid.py
│      
├─bin
│      run.sh
│      uwsgi.ini.default
│      
└─logs

mid.py是入口文件,应用定义为:

app = Flask(__name__)

2.uwsgi.ini配置

[uwsgi]
http = 127.0.0.1:9999
chdir = ../api_invcloud/
wsgi-file = mid.py
callable = app
processes = 4
threads = 2
py-autoreload = 1
pidfile=uwsgi.pid
vacuum = true

# log setting
disable-logging = false
daemonize = ../logs/uwsgi.log

3.Nginx转发配置

upstream uwsgi_server{
    server 127.0.0.1:9999;
    # 如果有多个服务,可以罗列在此当作负载均衡节点,n表示权重
    # server 127.0.0.1:9999 weight=n;
}

server {
    location /test {
        proxy_pass  http://uwsgi_server;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
        proxy_max_temp_file_size 0;
        proxy_connect_timeout      90;
        proxy_send_timeout         90;
        proxy_read_timeout         90;
        proxy_buffer_size          4k;
        proxy_buffers              4 32k;
        proxy_busy_buffers_size    64k;
        proxy_temp_file_write_size 64k;
    }
}

PS:

1.如果Python程序作为目录形式转发,可以将目录配置在全站配置之前;如果是全站转发,可以将静态资源目录独立出来,放在全站配置之前配置。

2.第一次通过Nginx访问如果发生500错误,可以尝试直接通过python运行入口文件,看看是否可以正常启动;或者通过 tail filename.log -f 的形式来查看uwsgi的日志。

3.用windows的,放弃挣扎吧。uWSGI无法在Windows中安装,直接会提示OS错误。Windows中整合IIS与Python,尝试使用wfastcgi。

原文地址:https://www.cnblogs.com/bashenandi/p/13689492.html