【问题标题】:How to dynamically load HTTP routing into NGINX from your webframework?如何将 HTTP 路由从您的 Web 框架动态加载到 NGINX?
【发布时间】:2013-05-06 15:51:27
【问题描述】:

我一直在关注 Web Frameworks Benchmark 并注意到许多 Web 框架遭受相同的性能损失,因为它们在 内执行 HTTP 路由框架本身,而不是利用 NGINX 的高性能 HTTP 服务器进行路由。

例如,在Flask python 框架中,您可能有:

@app.route('/add', methods=['POST'])
def add_entry():
    ...

这使您的应用程序比直接在 NGINX config 文件中执行更容易,如下所示:

server {
    listen 80;
    server_name example.com;

    location /add {
        ... // defer to Flask (python) app
    }

问题:如何获得 NGINX 内置 HTTP 路由的性能(使用 NGINX 自己的配置文件定义路由),同时通过在内部定义 HTTP 路由来保持应用程序开发的简单性你的网络框架?

有没有一种方法可以将 HTTP 路由从 INSERT_NAME_OF_YOUR_WEBFRAMEWORK 动态加载到 NGINX 中?

【问题讨论】:

    标签: python http web-applications nginx routing


    【解决方案1】:

    我不知道可以使用的库。但是编写一个脚本似乎很容易,它从应用程序的路由生成一个 Nginx 配置文件(例如,在应用程序设置期间)。可以使用 Nginx config 的“include”命令将该文件包含到服务器的主配置中:

    server {
        listen 80;
        server_name example.com;
    
        include /path/to/application/routes.conf
    }
    

    【讨论】:

    • 我猜,它只在生产环境中需要,效率很重要。因此在部署新版本应用的过程中重启 Nginx 是没有问题的。
    • 有一种方法可以在不重新启动整个服务器的情况下重新加载 nginx 配置:serverfault.com/questions/108261/…
    • 请记住,Flask 允许指定哪个 HTTP 动词(POST、GET 等)、URL 中的正则表达式、从查询字符串中检索变量(例如 '/user/' 和现在 'username' 是 Python 定义的变量,等于查询字符串值)等等......所以除非有人已经考虑过这些用例,否则从头开始并不是一件容易的事
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-04
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    • 2014-06-03
    相关资源
    最近更新 更多