在 nginx 服务器上添加 Flask

Adding Flask on top of a nginx server

我有一个使用 nginx 用作代理服务器的云服务器。这是一个 API 服务器,它从用户那里获取请求并将这些请求重定向到其他 URL。 Nginx足以完成这样的工作,但现在我想添加一个额外的功能。

我想集成支持以更新远程 MongoDB 服务器。为此,我想设置一个简单的 Flask 服务器。我的问题是,如何在不影响我现在已有的 nginx 服务器配置的情况下设置 Flask 服务器?我只将 Flask 与包中包含的默认原始网络服务器一起使用,所以我不确定如何将它与我现在拥有的 nginx 服务器集成。

这是更详细的计划。

当用户访问 "api.myserver.com" 时,我请求 "api.someotherserver.com" 并从那里获得响应。 (Nginx 这样做)

现在,我想向 "api.myserver.com/update_db?username=hello" 发出请求,并更新远程 MongoDB。 (烧瓶这样做)

谢谢!

您可以参考 Flask 文档:)

具体来说:

  1. http://flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#gunicorn
  2. http://flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#proxy-setups

实施:

  1. 运行 Gunicorn(我建议通过 Supervisord 启动它):

    gunicorn myproject:app
    
  2. 在 Nginx 中设置反向代理:

    server {
        listen 80;
    
        server_name _;
    
        access_log  /var/log/nginx/access.log;
        error_log  /var/log/nginx/error.log;
    
        location / {
            proxy_pass         http://127.0.0.1:8000/;
            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;
        }
    }
    

您需要代理您用于 Flask 的任何应用程序 (WSGI) 服务器。 Gunicorn and uWSGI 都是不错的选择。 Gunicorn 让您更快地开始工作,uWSGI 为您提供更多的可配置性。

假设你已经有一个 nginx 实例 运行 在 api.myserver.com,你需要在你的 nginx 站点配置中有这样的东西:

location / {
    proxy_set_header Host $host;
    proxy_pass <your app server's bound address or socket>;
}

根据您的设置和要求进行调整,重要的一点是 proxy_pass. Now, any requests that get sent to api.myserver.com will get reverse-proxied to the application server that's actually running your Flask instance. Flask will then take care of routes like update_db and any parameters. Here's some good documentation 设置 WSGI 服务器。