gpt4 book ai didi

nginx - 如何在网站的子文件夹中托管 Flask 应用程序?

转载 作者:行者123 更新时间:2023-12-05 03:41:28 25 4
gpt4 key购买 nike

我有一个 Flask 应用程序,我想将其托管在网站的子文件夹中,例如 example.com/cn

我配置了我的nginx

location /cn {
proxy_pass http://localhost:8000/;
}

所以如果我访问example.com/cn,它将重定向到flask的索引页面。

但是,我在flask上写了其他页面的路由,比如app.route('/a')。所以如果我点击页面a的链接,URI是example.com/a,那么nginx就无法将它重定向到正确的页面.

我想我可以像app.route('/cn/a')那样重写flask上的所有路由,但是比较复杂。如果有一天我想在 example.com/en 上部署它,我想我需要再次重写所有路由。

还有其他方法吗?

最佳答案

您需要将APPLICATION_ROOT 参数添加到您的 Flask 应用中:

from flask import Flask, url_for
from werkzeug.serving import run_simple
from werkzeug.wsgi import DispatcherMiddleware

app = Flask(__name__)
app.config['APPLICATION_ROOT'] = '/cn'

如果您需要在您的服务器上托管多个应用程序,您可以配置 nginx 将所有请求重定向到由 gunicorn 服务的特定 flask 应用程序,就像这样。 (如果您的服务器只托管一个应用程序则没有必要)在这里找到更多关于 gunicorn 和 nginx 的信息:https://docs.gunicorn.org/en/stable/deploy.html

server {
listen 8000;
server_name example.com;

proxy_intercept_errors on;
fastcgi_intercept_errors on;

location / {
include proxy_params;
proxy_pass http://unix:/path_to_example_flask_app_1/app.sock;
}

location /cn/{
include proxy_params;
proxy_pass http://unix:/path_to_example_flask_app_cn/app.sock;
}
}

使用 gunicorn 服务 flask 应用程序:这里有一个完整的例子:https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04

#move into project directory
/path_to_gunicorn/gunicorn --workers 3 --bind unix:app.sock -m 007 run:app

如果您使用的是 flask_restful,您也可以通过以下方式指定根路径:

from flask import Flask
from flask_restful import Api

app = Flask(__name__)
app.debug = False
api = Api(app, prefix='/cn')

api.add_resource(ResourceClass, '/example_path') #will be served when the resource is requested at path /cn/example_path

if __name__ == '__main__':
app.run(host="0.0.0.0", port=8000)

关于nginx - 如何在网站的子文件夹中托管 Flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67737069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com