【问题标题】:Django and Flask on same nginx server同一 nginx 服务器上的 Django 和 Flask
【发布时间】:2017-12-15 05:07:58
【问题描述】:

当我访问 mysite.com 时,我目前在我的主站点上运行了一个 Djago 应用程序。但是,我希望 mysite.com/flaskapp 运行一个单独的 Flask 应用程序。我可以设置两个支持 nginx 站点的配置文件并在不同的端口上运行每个应用程序,但由于各种原因,我想在同一个端口上运行它们(如果可能的话)。当我在我的 nginx 服务器文件中配置我的 flaskapp/ 位置时,我收到 404 错误。

这是我的主管配置文件:

[program:MYSITE]
command=/var/www/html/MYSITE/prodenv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/MYSITE.sock MYSITE.wsgi
directory=/var/www/html/MYSITE/public_html
autostart=true
autorestart=true
stderr_logfile=/var/log/MYSITE.err.log
stdout_logfile=/var/log/MYSITE.out.log


[program:FLASKAPP]
directory=/var/www/html/MYSITE/public_html/FLASKAPP/api
command=/var/www/html/MYSITE/public_html/FLASKAPP/venv/bin/gunicorn --workers 3 --bind unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock FLASKAPP:app
autostart=true
autorestart=true
stderr_logfile=/var/log/FLASKAPP.err.log
stdout_logfile=/var/log/FLASKAPP.out.log

还有我的 nginx 站点启用文件:

server {
    listen 80;
    listen [::]:80;

    server_name MYSITE;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        root /var/www/html/MYSITE/public_html;
        expires 30d;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/html/MYSITE/public_html/MYSITE.sock;
    }

    location /FLASKAPP/ {
        include proxy_params;
        proxy_pass http://unix:/var/www/html/MYSITE/public_html/FLASKAPP/api/FLASKAPP.sock; 
    }
}

我写了一个函数来检查请求的url

    @app.errorhandler(404)
    def page_not_found(error):
         return 'This route does not exist {}'.format(request.url), 404

返回:

这条路线不存在http://MYSITE/FLASKAPP

Flask 应用程序显然可以运行,但是路由搞砸了。我该如何解决这个问题?

【问题讨论】:

  • 你检查过你的 nginx 日志吗?

标签: python django nginx flask


【解决方案1】:

我想通了。我重写了 url 以删除子目录,现在一切正常:

      rewrite ^/FLASKAPP(.*)$ $1 break;

【讨论】:

  • 想解释一下你在哪里应用了这个?对已编辑的配置文件进行编辑之前和之后的编辑比模糊的答案更有帮助。
  • 我发现这与 Nginx 配置文件有关。你是在位置块内部还是外部重写指令?此外,很高兴知道是什么让您使用该解决方案。谢谢!
  • @BringBackCommodore64 我在启用站点的 nginx 配置文件的 location 块中添加了这一行。该行是我对位置块所做的唯一添加,我通过在我的应用程序中回显 url 和路由找到它。
猜你喜欢
  • 2012-03-10
  • 1970-01-01
  • 2014-01-02
  • 2017-03-27
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多