【Apache反向代理Bokeh serve应用 】

网上说Bokeh serve帖子本来就比较少,用Apache反向代理Bokeh serve更少了,经过自己几天的摸索,终于搞通了/

一、 Bokeh的启动:

首先python程序,需要使用curdoc(),而不是使用show()命令!!
举例如下,将下面的python程序命名为 myapp.py 复制一个命名为myapp2.py然后放到C:/Bokeh_serve文件夹下

from bokeh.plotting import figure, curdoc
bokeh_doc = curdoc()
# 创建图
p = figure(plot_width=400, plot_height=400)

# 添加具有大小、颜色和 alpha 的圆形渲染器
p.circle([1, 2, 3, 4, 5], [4, 7, 1, 6, 3],
         size=10, color="navy", alpha=0.5)

bokeh_doc.add_root(p)
bokeh_doc.title = "Bokeh App ."

二、 电脑上安装运行环境bokeh.whl进行bokeh的环境安装,下载地址:
https://www.lfd.uci.edu/~gohlke/pythonlibs/
搜索:bokeh找到对应版本下载
如果python程序用到了pandas、numpy一类的库也需要下载对应的whl文件,
然后cmd命令里 :

pip install (将whl文件拖入cmd窗口,回车键安装)

1、 如果要实现本地IP 127.0.0.1:端口号的访问:则需要用“–allow-websocket-origin”命令+120.0.0.1:80,(否则只能用localhost:5006访问,因为bokeh serve默认不允许IP访问)
启动bokeh serve的cmd命令如下:

bokeh serve C:\Bokeh_Serve\myapp.py  --port 5006  --allow-websocket-origin 127.0.0.1:5006  --allow-websocket-origin 127.0.0.1:80

以上为启动C:\Bokeh_Serve\文件下myapp.py 部署在5006端口(默认端口),允许本地回环127.0.0.1:5006或者默认端口80进行访问

2、如果要远程IP访问或者Apache反向代理外网访问(外网访问80端口,由Apache反向代理到指定的端口):则需要用“–allow-websocket-origin”命令+“本机外网IP地址:80” ,以运行外网IP访问
启动bokeh serve的cmd命令如下:

bokeh serve C:\Bokeh_Serve\myapp.py  --port 5006 ----allow-websocket-origin 127.0.0.1:5006  --allow-websocket-origin 111.01.01.XXX(本机外网IP):80 

以上为启动C:\Bokeh_Serve\文件下myapp.py 部署在5006端口,允许外网访问

3、如果即允许本地又允许远程IP访问可以并列写出(官网说可以用逗号隔开,但没研究出来),
启动bokeh serve的cmd命令如下:

bokeh serve C:\Bokeh_Serve\myapp.py  --port 5006 --allow-websocket-origin 127.0.0.1:5006 --allow-websocket-origin 127.0.0.1:80 --allow-websocket-origin 111.01.01.XXX(本机外网IP):80 

三、 Apache的反向代理设置
1、首先下载Apache,下载地址
https://www.apachelounge.com/download/
以及C++环境:下载地址
https://www.apachelounge.com/download/VC11

解压到C盘根目录(可以自由设定,个人习惯C盘根目录)

2、在Apache文件下的conf文件夹里找到httpd.conf文件,用Notepad++打开

分别设置\htdocs目录如下所示(以下以Apache24放置在C盘根目录为例)
在这里插入图片描述

2、修改以下3项(很多讲Apache反向代理的帖子都提到的mode_proxy.so和mode_proxy_http.so 和httpd-vhosts.conf),将前面的注释#去掉即可(可以用notepad++搜索查找)

在这里插入图片描述

3、【关键】:一定要打开websocket,找到这一行去掉前面的注释,否则无法远程访问。bokeh serve会返回403错误,在这个地方卡壳了很久

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

修改完效果如下:
在这里插入图片描述

4、修改httpd.conf设置文件里服务器名称

ServerName Localhost:80

5、找到Apache24\conf\extra\ 文件夹里修改里面的 httpd-vhosts.conf 代理设置文件(可以参考Bokeh service 官方Apache反向代理的说明)
需要修改的地方有设置ProxyPass和ProxyPassReverse,可参考示例代码
【关键】:在Bokeh安装目录搜到static目录位置(这一步不做好,浏览器无法正常显示,我这里用的是Bokeh默认安装路径)替换官方示例里的Alias和<Directory 后面的path路径
官方示例:
在这里插入图片描述
Bokeh serve static文件位置(可以用windows搜索定位static文件夹)
在这里插入图片描述
完成后代码:

<VirtualHost *:80>
    CustomLog "C:/Apache24/logs/access_log" combined
    ErrorLog "C:/Apache24/logs/error_log"

    ProxyPreserveHost On
	#####1#####
	ProxyPass /myapp/ws ws://127.0.0.1:5006/myapp/ws
    ProxyPassReverse /myapp/ws ws://127.0.0.1:5006/myapp/ws
    
    ProxyPass /myapp http://127.0.0.1:5006/myapp
    ProxyPassReverse /myapp http://127.0.0.1:5006/myapp
	#####2#####
	ProxyPass /myapp2/ws ws://127.0.0.1:5007/myapp2/ws
    ProxyPassReverse /myapp2/ws ws://127.0.0.1:5007/myapp2/ws
	
    ProxyPass /myapp2 http://127.0.0.1:5007/myapp2
    ProxyPassReverse /myapp2 http://127.0.0.1:5007/myapp2

    <Directory />
        Require all granted
        Options -Indexes
    </Directory>
	
	
	Alias /static C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Lib\site-packages\bokeh\server\static
	<Directory C:\Users\Administrator\AppData\Local\Programs\Python\Python310\Lib\site-packages\bokeh\server\static>
        # directives to effect the static directory
        Options +Indexes
    </Directory>
</VirtualHost>

完成后代码截图:
在这里插入图片描述

以上代码实现了远程访问本机外网IP地址默认端口80时,根据后缀名不同分别映射到5006和5007端口不同的bokeh serve 侦听的程序 :
本机外网IP/myapp 映射到5006端口
另外一台外网计算机浏览器输入:111.XX.XX.XX(本机外网IP)/myapp
将访问5006端口由bokeh serve侦听的myapp.py

本机外网IP/myapp2 映射到5007端口
另外一台外网计算机浏览器输入:111.XX.XX.XX(本机外网IP)/myapp2
将访问5007端口由bokeh serve侦听的的myapp2.py

前提这里假设myapp.py和myapp2.py放置到C:/Bokeh_serve文件夹下

此时,还需要使用Bokeh server分别启动5006和5007端口对应的myapp和myapp2两个程序
使用bokeh serve启动5006端口的名为myapp.py的程序CMD命令如下:

bokeh serve C:\Bokeh_Serve\myapp.py  --allow-websocket-origin 127.0.0.1:5006 --allow-websocket-origin 127.0.0.1:80 --allow-websocket-origin 120.78.95.174:80

使用bokeh serve启动5007端口的名为myapp2.py的程序CMD命令如下:

bokeh serve C:\Bokeh_Serve\myapp2.py  --port 5007  --allow-websocket-origin 127.0.0.1:5007  --allow-websocket-origin 127.0.0.1:80 --allow-websocket-origin 120.78.95.174:80

注意:Apache的代理设置的后缀名称、python文件名称、cmd启动名称尽量一致,尽量避免混淆
在这里插入图片描述

在这里插入图片描述

这时,就可以通过外网或者内网访问默认80端口,看到bokeh serve的返回图像了

四、 如果使用不同后缀对同一个端口号不同的.py程序访问,可参考Bokeh官方文档使用命令“—prefix=/目录名”来增加bokeh sever 固定端口的子目录,用于在一个端口启动多个bokeh web的场景,区分也是靠IP/后缀来实现。这时Apache只需要代理一个端口

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值