我在使用 Nginx 作为反向代理设置 apache 超集时遇到问题(这可能是 nginx 配置错误)。

配置的服务器 block (如果我遗漏了什么,让我知道,我会添加它):

server { 
    listen 80 default_server; 
    server_name _; 
    root /var/www/data; 
    error_log   /var/www/bokehapps/log/nginx.error.log info; 
    location /static { 
        alias /usr/lib/python2.7/site-packages/bokeh/server/static; 
    } 
 
  
    location /superset { 
        proxy_pass http://0.0.0.0:8088; 
        proxy_set_header Upgrade $http_upgrade; 
        proxy_set_header Connection "upgrade"; 
        proxy_http_version 1.1; 
        proxy_connect_timeout 600; 
        proxy_send_timeout 600; 
        proxy_read_timeout 600; 
        send_timeout 600; 
    } 
} 

我可以 curl 到 0.0.0.0:8088 以获得重定向页面,我的请求正在发送到 werkzeug。但在我的浏览器中,一切都是 404。

请您参考如下方法:

由于您在前缀位置 (/superset) 提供服务,即使您是传递给 / 的代理,werkzeug 也在尝试提供 /superset 路由,不存在,因此为 404。

你应该定义一个前缀中间件,一个非常好的解释可以在这个线程中找到:Add a prefix to all Flask routes .

中间件应该作为 superset-config.py 的一部分传递给 Superset/FAB,relevant documentation

将两者结合起来,您可能会在 superset-config.py 中得到类似这样的内容:

class PrefixMiddleware(object): 
 
def __init__(self, app, prefix='superset'): 
    self.app = app 
    self.prefix = prefix 
 
def __call__(self, environ, start_response): 
 
    if environ['PATH_INFO'].startswith(self.prefix): 
        environ['PATH_INFO'] = environ['PATH_INFO'][len(self.prefix):] 
        environ['SCRIPT_NAME'] = self.prefix 
        return self.app(environ, start_response) 
    else: 
        start_response('404', [('Content-Type', 'text/plain')]) 
        return ["This url does not belong to the app.".encode()] 
     
ADDITIONAL_MIDDLEWARE = [PrefixMiddleware, ] 


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!