1Panel
1Panel copied to clipboard
[FEATURE] 面板配置https后,浏览器使用http协议访问自动重定向到https协议
1Panel 版本
1.9.6
请描述您的需求或者改进建议
面板配置https后,使用http协议打开会显示一串英文,而不是自动重定向,这不太友好。
Client sent an HTTP request to an HTTPS server.
希望浏览器使用http协议访问面板的时候,自动重定向到https协议
请描述你建议的实现方案
修改Go语言标准库里的代码 Go/src/net/http/server.go ,参考:
https://github.com/bddjr/go-https-port-auto-redirect-for-http
附加信息
go官方仓库相关issue
https://github.com/golang/go/issues/49310
感谢反馈,我们会在后续版本支持上述需求。
先别急,我先给go语言标准库发PR,等合并了之后,你们更新go版本,然后按照新的标准实现这个功能
那个PR 还没人审核,有个暂时的缓解措施就是添加 HSTS 响应头(我用F12看过了,面板没有这个)
Strict-Transport-Security: max-age=31536000
然后如果已经用https访问过了,会产生HSTS缓存,下次用http访问会直接重定向。
但是如果没有缓存,那么还是会出现 Client sent an HTTP request to an HTTPS server.
手贱点了一下面板SSL,现在面板打不开了,也提示这个
手贱点了一下面板SSL,现在面板打不开了,也提示这个
1pctl reset https 命令可以取消 https 登录
我做了个 go mod 劫持 net.Conn 实现了这个功能。
https://github.com/bddjr/hlfhr
使用的时候只需要在 &http.Server{} 外面套一层 hlfhr.New() ,然后修改一下变量类型就可以了
var srv *hlfhr.Server
func main() {
srv = hlfhr.New(&http.Server{
Addr: ":5678",
Handler: http.HandlerFunc(httpResponseHandle),
ReadHeaderTimeout: 10 * time.Second,
IdleTimeout: 10 * time.Second,
})
// Then just use it like &http.Server .
err := srv.ListenAndServeTLS("localhost.crt", "localhost.key")
if err != nil && err != http.ErrServerClosed {
fmt.Println(err)
}
}