我有一个 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
上部署它,我想我需要再次重写所有路由。
有人有别的办法吗?
4条答案
按热度按时间bvhaajcl1#
您需要将APPLICATION_ROOT参数添加到 flask 应用中:
如果您需要在服务器上托管多个应用程序,您可以配置nginx将所有请求重定向到由gunicorn提供特定flask应用程序,如下所示。(如果您的服务器只托管一个应用程序,则不需要这样做)在此处了解更多关于gunicorn和nginx的信息:https://docs.gunicorn.org/en/stable/deploy.html
为长颈瓶应用程序提供枪角:一个完整的例子在这里:https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-gunicorn-and-nginx-on-ubuntu-18-04
如果您使用的是flask_restful,则还可以通过以下方式指定根路径:
umuewwlo2#
我已经找到了一个完美的解决办法。
vc9ivgsu3#
定义蓝图时可以使用
url_prefix="/cn"
选项:https://flask.palletsprojects.com/en/2.0.x/blueprints/#nesting-blueprints
ckocjqey4#
假设您希望在
/api
下使用Nginx托管应用程序。首先,将URL前缀配置为
location
和X-Forwarded-Prefix
标头:然后使用Werkzeug的
ProxyFix
中间件告诉Flask它位于代理之后:另见:
P.S.如果您使用的是OpenAPI,还记得更新
servers
字段以指示服务器的位置。