我在使用 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, ]