【问题标题】:uWSGI and nginx configuration for multiple flask apps running on different ports on the same serveruWSGI 和 nginx 配置,用于在同一服务器上的不同端口上运行的多个烧瓶应用程序
【发布时间】:2017-02-27 11:03:35
【问题描述】:
我有多个小型烧瓶应用程序。我想在同一台服务器(单个域)的不同端口上运行每个烧瓶应用程序。
例如说我有 3 个烧瓶应用程序
- tasks.py --> 仅具有 /task 的 API 端点
- users.py --> 仅具有 /user 的 API 端点
- analysis.py --> 仅具有 /analysis 的 API 端点
域名:api.test.com
我想在端口 8080 上运行 tasks.py,在端口 5000 上运行 users.py,在端口 4500 上运行 analysis.py。
我想配置我的 uWSGI 和 nginx 以便当我点击 api.test.com/task/xxxx 时我想要请求被定向到端口 8080(正在运行 tasks.py),
同样,api.test.com/user/xxxx 应该被定向到端口 5000 和 api.test.com/analysis/xxxx 到 >4500
【问题讨论】:
标签:
api
nginx
flask
configuration
uwsgi
【解决方案1】:
在我看来,你可以通过一个端口拥有一个单一的 uWSGI 实例,但如果你喜欢这种思维方式,那么你可以遵循下一种方式。
假设,您已经有几个 uWSGI 实例在不同的端口上运行:8080、5000 和 4500。
然后你需要创建一个大致如下内容的 Nginx 配置(请阅读 cmets):
# webserver configuration
server {
# port to be listened by the web-server
listen 80;
# domain name with its aliases or the ip
server_name api.test.com;
# SETUP THREE LOCATION SECTIONS FOR EACH ACTION
location /task {
# AND SPECIFY THE NEEDED ADDRESS:PORT HERE
uwsgi_pass YOUR_SERVER_IP:8080;
# ONE MAY ALSO USE UNIX-SOCKET (IF ON THE SAME SERVER), INSTEAD OF A PORT
# uwsgi_pass unix:/path/to/the/socket.sock
include /etc/nginx/uwsgi_params; # stadard parms with environment variables required by a uwsgi app
}
location /user {
uwsgi_pass YOUR_SERVER_IP:5000;
include /etc/nginx/uwsgi_params;
}
location /analysis {
uwsgi_pass YOUR_SERVER_IP:4500;
include /etc/nginx/uwsgi_params;
}
}
我希望你知道如何为每个端口运行三个 uWSGI 实例。
在我看来,这非常难看,因为要添加任何新操作,您必须再次编辑 Nginx 配置。所以我不推荐这个解决方案,只建议这个答案作为 Nginx 与其他 Web 服务器连接的能力的演示。