2017-08-24 657 views
0

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

服务器块(如果我失去了一些东西,让我知道,我会添加它):

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; 
    } 
} 

我能够蜷缩成0.0.0.0:8088得到重定向页面,并且我的请求正在向werkzeug发送。但是,在我的浏览器,一切都404

感谢您的帮助

+0

而不是使用'0.0.0.0'尝试在nginx'proxy_pass'和浏览器中使用'127.0.0.1' –

回答

0

不知道是否仍然适用,但因为你是服务上的预定位置(/superset),即使你是代理传递给/, werkzeug试图服务/superset路由,这是不存在的,因此是404。

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

中间件应该不是被传递给超/ FAB为superset-config.py的一部分,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, ] 

希望这有助于:)