Reverse proxy not working (but works with Flask)

I’m trying to run behind a remote proxy eg http://domain.com/xyz/ and am using the script from here to handle the redirect to the xyz directory. I tested with a sample Flask app and it works great but with Dash, it gets stuck on “Loading…” (with and without the script). Code below:

import dash
import dash_html_components as html
from dash.dependencies import Input, Output, State
import flask

class ReverseProxied(object):
    """
    Wrap the application in this middleware and configure the
    front-end server to add these headers, to let you quietly bind
    this to a URL other than / and to an HTTP scheme that is
    different than what is used locally.
    In nginx:
    location /prefix {
        proxy_pass http://192.168.0.1:5001;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Script-Name /prefix;
        }
    :param app: the WSGI application
    """

    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        script_name = environ.get('HTTP_X_SCRIPT_NAME', '')
        if script_name:
            environ['SCRIPT_NAME'] = script_name
            path_info = environ.get('PATH_INFO', '')
            if path_info and path_info.startswith(script_name):
                environ['PATH_INFO'] = path_info[len(script_name):]
        server = environ.get('HTTP_X_FORWARDED_SERVER_CUSTOM',
                             environ.get('HTTP_X_FORWARDED_SERVER', ''))
        if server:
            environ['HTTP_HOST'] = server

        scheme = environ.get('HTTP_X_SCHEME', '')

        if scheme:
            environ['wsgi.url_scheme'] = scheme

        return self.app(environ, start_response)

app = dash.Dash('')
server = flask.Flask(__name__)
server.wsgi_app = ReverseProxied(server.wsgi_app)
app = dash.Dash(__name__, server=server)
app.scripts.config.serve_locally = True

app.layout = html.Div([
    html.Button('test', id='test'),
])


if __name__ == '__main__':
    app.run_server(debug=True)

Any update on this issue? Even I am facing the same situation. The page is stuck at Loading…

Did you manage to solve this?

I have exactly the same problem. Works with Flask but doesn’t with Dash. I’ve tried modifying the url_base_pathname in dash.Dash() to match the path at which I host the dash app, but it is still the same problem.

Did anyone manage to solve this problem ?

I’m going to add another ping to this to see if anyone was able to solve it. I’m having a similar issue. Everything runs fine when run locally, but doesn’t work when run behind a reverse proxy…

Also facing this issue. If anyone has resolved this please post, thanks!

Try setting the following params when setting up your app: requests_pathname_prefix.

you will have to prefix your links and set external_link=False so it won’t reload the page.

see chriddyp response in attached link.