nonebot-plugin-gocqhttp icon indicating copy to clipboard operation
nonebot-plugin-gocqhttp copied to clipboard

如何配置监听IP使插件对外可以访问

Open shoucandanghehe opened this issue 3 years ago • 11 comments

在服务器上部署时较难访问到127.0.0.1 可以添加一个可选配置 让用户能自定义后端监听IP

shoucandanghehe avatar Feb 16 '22 17:02 shoucandanghehe

监听IP选项是由NoneBot所控制的, 请参考文档进行修改

mnixry avatar Feb 16 '22 23:02 mnixry

明白了 还有两个问题

本项目是直接用nonebot2的ReversedDriver实现web服务的吗 如果公网直接暴露端口会不会有安全性问题,毕竟没有ssl加密之类

shoucandanghehe avatar Feb 17 '22 00:02 shoucandanghehe

本项目是直接用nonebot2的ReversedDriver实现web服务的吗

是, 具体来讲是基于NoneBot默认使用的FastAPI, 理论上有可能兼容其他ReverseDriver~~, 但是我不会~~

如果公网直接暴露端口会不会有安全性问题,毕竟没有ssl加密之类

有, 我的建议是为uvicorn配置HTTPS或者使用其他Web服务器(比如Caddy或者Nginx)进行反向代理

而且安全性问题不止SSL加密, 因为你在事实上也同时暴露了OneBot反向ws监听的接口, 所以你最好配置access_token, 或者只对外开放plugin-gocqhttp提供的接口(即/go-cqhttp路径下暴露的内容), 并配置WEBUI_PASSWORD等项目

P.S. 根据 #124 ,似乎uvicorn的HTTP/1.1在长时间连接的情况下性能会比较差,所以这也是推荐使用反代的一个理由

mnixry avatar Feb 17 '22 02:02 mnixry

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

yhzcake avatar Jan 16 '23 12:01 yhzcake

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

传输实时日志使用的是WebSocket, Nginx需要额外的配置项来进行支持

mnixry avatar Jan 16 '23 12:01 mnixry

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

可以参考我的配置方法

location /<path_to_your_bot>/ {
        proxy_pass http://127.0.0.1:<port>/go-cqhttp/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

Well2333 avatar Mar 08 '23 08:03 Well2333

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

可以参考我的配置方法

location /<path_to_your_bot>/ {
        proxy_pass http://127.0.0.1:<port>/go-cqhttp/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

请问location后面填的是本地路径还是网络路径?

yhzcake avatar Mar 31 '23 01:03 yhzcake

是网络路径。

例如,你的bot绑定的端口是 11451, 然后希望用 https:///1919810/bot/ 这个地址访问bot的webui, 那么你可以这样填写

location /1919810/bot/ {
        proxy_pass http://127.0.0.1:11451/go-cqhttp/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}

这个配置本质上只是对请求进行了转发,并不会涉及到任何本地路径,就算你的bot不在这台服务器上,只要网络地址通畅依旧是可以访问的。

Well2333 avatar Mar 31 '23 03:03 Well2333

也就是说如果我想使用0.0.0.0:8000/go-cqhttp/访问这个网址只要填location /go-cqhttp/{...}就可以对吧

yhzcake avatar Mar 31 '23 04:03 yhzcake

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

我用的XShell这款软件的隧道功能,也能访问服务器上的本地。设置本地的侦听端口和目标主机的IP和端口,通过XShell连接上服务器后,就可以在本地访问目标主机的本地了。假设本地的侦听端口和服务器的端口都是12345,在本地输入:127.0.0.1:12345/go-cqhttp/就可以访问了。

symbolworld avatar Jun 07 '23 09:06 symbolworld

为了让本地其他设备可以访问127.0.0.1:8080/go-cqhttp用了nginx反代,连接状态显示断开,无法自动接收消息,需要手动点击刷新,请问有什么解决办法吗

我用的XShell这款软件的隧道功能,也能访问服务器上的本地。设置本地的侦听端口和目标主机的IP和端口,通过XShell连接上服务器后,就可以在本地访问目标主机的本地了。假设本地的侦听端口和服务器的端口都是12345,在本地输入:127.0.0.1:12345/go-cqhttp/就可以访问了。

这并不是什么 xshell 的隧道功能,是 ssh 的隧道功能,你在任何有完整功能的 ssh 客户端和服务端间理论上都能完成此操作,只不过你需要首先创建隧道才能访问,某种程度上也是挺麻烦的

Well2333 avatar Jun 07 '23 09:06 Well2333