Настройка Apache Superset с Nginx в качестве обратного прокси

У меня проблемы с настройкой надмножества apache с Nginx в качестве обратного прокси (вероятно, это неправильная конфигурация nginx).

Серверный блок конфигурации (если что-то не хватает, дайте мне знать, и я добавлю):

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.

Спасибо за вашу помощь


person super massive thraway    schedule 24.08.2017    source источник
comment
Вместо использования 0.0.0.0 попробуйте использовать 127.0.0.1 как в nginx proxy_pass, так и в браузере   -  person Tarun Lalwani    schedule 24.08.2017


Ответы (1)


не уверен, что все еще актуально, но поскольку вы обслуживаете местоположение с префиксом (/superset), и даже если вы переходите по прокси-серверу на /, werkzeug пытается обслуживать маршрут /superset, которого не существует, следовательно, 404.

Вам следует определить промежуточное ПО префикса, очень хорошее объяснение можно найти в этом потоке: Добавить префикс для всех маршрутов Flask.

Затем промежуточное ПО следует передать в Superset / FAB как часть superset-config.py, соответствующей документации

Комбинируя их, вы, скорее всего, получите что-то вроде этого в вашем 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, ]

Надеюсь это поможет :)

person Drazen Urch    schedule 15.01.2018
comment
Спасибо за это, я пробую ваше решение, но застрял в том, где разместить superset-config.py. Любые указатели с благодарностью оценены. - person mapping dom; 31.01.2019
comment
@mappingdom у меня он в той же директории, где вы запускаете команду superset runserver, надо подцепить - person Drazen Urch; 03.02.2019
comment
Это отличное решение, но большая часть статического содержимого прерывается, поскольку браузер запрашивает их с префиксом /static, а не /superset/static. - person ramdesh; 08.10.2019