Flask url处理端口

问题描述 投票:0回答:2

我在xx.xxx.xxx.xxx:5601上运行了Kibana(弹性搜索堆栈的一部分)。由于Kibana没有自己的身份验证,我试图将它包装在我的烧瓶登录设置下。换句话说,如果有人试图访问xx.xxx.xxx.xxx:5601,我需要将页面重定向到我的烧瓶登录页面。我可以使用URL上的@login_required装饰器来实现这一点......但我不知道如何设置烧瓶路径URL来处理端口5601,因为它需要以前导斜杠开头。

@app.route("/")
@login_required

有什么建议?

编辑@senaps:App 1是烧瓶,运行在0.0.0.0,端口9500,App 2是node.js基于Kibana,我可以选择在localhost端口5601上运行然后通过nginx公开,或者我可以直接公开IP:5601。无论哪种方式,它在启动时作为“服务”运行并且始终在5601上进行监听。

问题陈述 - 应用2包含在App 1登录下。我不想使用nginx来验证App 2,而是使用App 1 flask登录设置。

我目前正在使用gunicorn来提供烧瓶应用程序并使用nginx反向代理设置来路由到烧瓶app。随后的指南是digitalocean

选项1 - 在IP:5601上向公众公开的Node.js Kibana应用程序。

server {
listen 80;
server_name example.com;

location / {
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
}}

如果我访问IP,它会转到我的烧瓶应用程序,很棒。如果有人访问IP:5601,我无法弄清楚如何处理烧瓶视图网址。它应该重定向到我的烧瓶应用程序进行身份验证,而不是将它们带到Kibana。

我尝试添加另一个服务器块来监听5601和proxy_pass到烧瓶sock文件,我得到一个nginx错误,说它无法绑定到5601并要求我在5601杀死监听器。但我需要Kibana始终在5601运行(除非我能找到通过python flask启动此服务的方法)。

选项2 - Kibana应用程序在安装在“/ kibana”的localhost端口5601上运行,以便不与烧瓶所需的“/”冲突。然后通过nginx反向代理公开它。

server {
listen 80;
server_name example.com;

location / {
    include proxy_params;
    proxy_pass http://unix:/home/ubuntu/myproject/myproject.sock;
}
location /kibana/ {
    proxy_pass http://localhost:5601;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    rewrite /kibana/(.*)$ /$1 break;
}}

通过这种设置,可以通过IP / kibana访问Kibana。但是选项2的问题是如果我在我的烧瓶应用程序中有一个/ kibana视图来捕获它,它不会生效,因为重定向到Kibana发生在nginx,所以flask永远不会介入。

由于大多数解决方案都使用nginx来验证Kibana而不是任何其他python应用程序,因此我无法在堆栈上找到太多信息。

鉴于此,我将如何为您的解决方案提供服务?非常感谢您对此进行调查。

python flask kibana flask-login
2个回答
0
投票

所以你有两个独立的应用程序吗?您希望第二个应用程序仅在用户通过第一个应用程序进行身份验证时才能运行

最简单的方法是,使用相同的db.this方式,flask登录将检查基于相同数据库的用户身份验证。话虽如此,你可能无法处理会话完全没问题。

诀窍在于qazxsw poi和qazxsw poi。你应该使用uwsgi的qazxsw poi模式,以便部署这两个应用程序。

nginx

现在,问题可能是如果第一个应用程序也有这条路线,我们将如何得到第二个应用程序的Emperor路线。好吧,这不会是一个问题,因为网址是不同的。但你需要你的uwsgi配置为将@app.route("/") @login_required def function() 的请求转发到第一个应用程序和/到第二个应用程序。

nginx

既然你询问了如何做的建议,我不包括代码。所以你可以根据你的设置找出答案。或者您应该告诉我们您如何设置和提供这两个应用程序,以便我们提供更多代码。


0
投票

一种方法是通过Flask应用程序代理到Kibana服务器的所有流量。您可以使用catch-all路由来处理不同路径的转发。您不允许从Flask应用程序以外的来源访问Kibana。

xx.x.x.x

另一个选择是使用Nginx作为反向代理并使用Nginx来处理身份验证。如果满足您的需求,最简单的方法是使用基本身份验证。 x.x.x.x:y

或者,您可以在访问Kibana应用程序时检查Nginx配置中的自定义标头,如果缺少,则重定向到Flask应用程序。

另一种选择是使用现有的Kibana身份验证代理。商业选择,Elastic x-pack是一种流行的选择。另一个OSS选项是server { listen 80; server_name example.org www.example.org; root /var/www/port80/ } server { listen 5601; server_name example.org www.example.org; root /var/www/port81/ } 。我也没有亲自使用过。

© www.soinside.com 2019 - 2024. All rights reserved.