python - 如何部署散景应用程序而不出现 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;
}
有没有办法让散景图工作?我花了无数个小时试图弄清楚这一点,我真的很感激一些帮助。
解决方案
推荐阅读
- symfony - MopaBootstrap 在 symfony 中定义在哪里?
- kdb - KDB - 基于另一列过滤列表列
- batch-file - 批量压缩单个目录中的多个文件
- java - 使用 arrayName[i][j].equalsIgnoreCase 在二维数组中搜索 Java 未找到值
- javascript - MongoDB JS,查找并返回
- javascript - DataTables 更改列的顺序
- php - 在 Woocommerce 中有条件地向购物车商品和订购商品添加一个类
- assembly - “操作数不匹配”汇编语法错误
- python - pcap pakage to python project error is pcap.h not found
- vue.js - 如何在 vueJS 中捕获后退按钮