1Panel icon indicating copy to clipboard operation
1Panel copied to clipboard

[FEATURE] 面板配置https后,浏览器使用http协议访问自动重定向到https协议

Open bddjr opened this issue 1 year ago • 6 comments

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

bddjr avatar Feb 14 '24 15:02 bddjr

感谢反馈,我们会在后续版本支持上述需求。

wanghe-fit2cloud avatar Feb 15 '24 15:02 wanghe-fit2cloud

先别急,我先给go语言标准库发PR,等合并了之后,你们更新go版本,然后按照新的标准实现这个功能

image

bddjr avatar Feb 17 '24 04:02 bddjr

那个PR 还没人审核,有个暂时的缓解措施就是添加 HSTS 响应头(我用F12看过了,面板没有这个)

Strict-Transport-Security: max-age=31536000

然后如果已经用https访问过了,会产生HSTS缓存,下次用http访问会直接重定向。
但是如果没有缓存,那么还是会出现 Client sent an HTTP request to an HTTPS server.

bddjr avatar Feb 20 '24 11:02 bddjr

手贱点了一下面板SSL,现在面板打不开了,也提示这个

hcllmsx avatar Mar 22 '24 16:03 hcllmsx

手贱点了一下面板SSL,现在面板打不开了,也提示这个

1pctl reset https 命令可以取消 https 登录

wanghe-fit2cloud avatar Mar 23 '24 11:03 wanghe-fit2cloud

我做了个 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)
	}
}

bddjr avatar Mar 30 '24 02:03 bddjr