最近自己搞内网穿透,把本地的ollama web映射到服务器公网ip,但是刚开始没经验映射到了6666端口,局域网内都可以正常访问,但映射后一直不能访问,本来以为是frp有问题,结果排查很长时间也没找到问题。
可是我直接使用curl是可以返回HTML内容的,说明映射没问题,服务也没问题,但浏览器访问解析就是有问题,搞了一天都搞不懂,后来忽然发现,浏览器报告的不是找不到服务,而是
ERR_UNSAFE_PORT
看起来不是服务问题,而是安全问题,查询后才发现浏览器对于局域网和公网访问的安全策略不一样,本地随便哪个端口都可以,但公网只能是80,443, 如果需要访问别的端口,需要改设置如下:
而且这不只是firefox一个浏览器的问题,而是chrome和其他好几个浏览器测试都如此,应该是为了安全原因限制了访问公网非80 端口。那么这时候就有两个选择任选其一:
- 服务器改端口,使http服务映射在80端口
- 浏览器改端口设置,使其可以访问非80端口
不过其实我搞不太懂具体是和什么协议有关系,因为我自己跑的python server就可以运行在别的端口通过浏览器访问,其他容器网页程序也可以在非80端口浏览器访问而无需任何设置,可能也和服务内部的限制有关。