首页 > 解决方案 > 如何部署散景应用程序而不出现 403 禁止错误?

问题描述

我正在制作一个使用烧瓶和散景的网站。这是dashboard.py 文件中的一个片段。

将 www.****.org 替换为 localhost 并在本地运行时,会显示散景图。

但是,当我使用 NGINX 和 Gunicorn 将它部署在(linode)服务器上时。散景图不显示,我在控制台上收到 403 Forbidden 错误。

这是错误

GET https://www.****.org:43733/bkapp/autoload.js?bokeh-autoload-element=1001&bokeh-app-path=/bkapp&bokeh-absolute-url=https://www.****.org:43733/bkapp net::ERR_TIMED_OUT
GET https://cdn.bokeh.org/bokeh/release/bokeh-2.0.2.min.css net::ERR_ABORTED 403
GET https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.0.2.min.css net::ERR_ABORTED 403

这是我的 dashboard.py 文件中的一个片段

# can't use shortcuts here, since we are passing to low level BokehTornado
bkapp = Application(FunctionHandler(create_stocks_graph))

# This is so that if this app is run using something like "gunicorn -w 4" then
# each process will listen on its own port
sockets, port = bind_sockets("www.****.org", 0)

# initiate bokeh server
def bk_worker():
    # https://github.com/bokeh/bokeh/blob/1.1.0/examples/howto/server_embed/flask_gunicorn_embed.py
    asyncio.set_event_loop(asyncio.new_event_loop())

    bokeh_tornado = BokehTornado({'/bkapp': bkapp}, extra_websocket_origins=["www.****.org"])
    bokeh_http = HTTPServer(bokeh_tornado)
    bokeh_http.add_sockets(sockets)

    server = BaseServer(IOLoop.current(), bokeh_tornado, bokeh_http)
    server.start()
    server.io_loop.start()

Thread(target=bk_worker).start()

# stocks graph script
script = server_document('https://www.****.org:%d/bkapp' % port)

# refresh custom_sectors before initially generating dashboard
current_user.summaries_sectors = pickle.dumps([])

这是我的 NGINX 配置:

server {
        server_name www.****.org;
location / {
                proxy_pass http://127.0.0.1:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.****.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.****.org/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = www.****.org) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


        listen 80;
        server_name www.****.org;
        return 301 https://$host$request_uri;

}

有没有办法让散景图工作?我花了无数个小时试图弄清楚这一点,我真的很感激一些帮助。

标签: pythonpython-3.xnginxbokehgunicorn

解决方案


推荐阅读