goproxy / goproxy

A minimalist Go module proxy handler.

Home Page:https://pkg.go.dev/github.com/goproxy/goproxy

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

请求某个资源时容易出现500错误

int188 opened this issue · comments

现象
我们基于goproxy@0.7.2版本搭建的了内部goproxy服务,代码如下:

package main

import (
	"github.com/goproxy/goproxy"
	"net/http"
	"os"
)

func main() {
	http.ListenAndServe(":9080", &goproxy.Goproxy{
		GoBinEnv: append(
			os.Environ(),
			"GOPROXY=https://goproxy.cn",  // 使用 Goproxy.cn 作为上游代理
			"GOPRIVATE=*.xxx.com", // 解决私有模块的拉取问题(配置成公司内部的代码源)
		),
		ProxiedSUMDBs: []string{
			"sum.golang.org https://goproxy.cn/sumdb/sum.golang.org", // 代理默认的校验和数据库
		},
	})
}

基于go-1.16.1编译后,部署了若干台机器。运行一段时间后,接到反馈拉取某些golang模块会出现500错误,例如:
curl "http://127.0.0.1:9080/github.com/bombsimon/logrusr/@v/v1.0.0.mod"
会返回错误:
"internal server error"
状态码是500
但访问其他资源是ok的,就是某些资源始终都是这个500错误(其他机器上正常)。
然后,重启goproxy服务后,再curl则正常了。

** 问题频率 **
随机在不同的机器上都出现这个问题,访问某些资源(资源有随机性,基本是github.com的)时500错误。
重启后在1个星期到2天之间就会重新出现此问题。
我采取的应对措施是:针对出现了500错误的资源url进行监控,发现500则重启goproxy
但后来发现这个方法也不能保证服务稳定性,因为总是有各种各样的github.com的资源会出现500,
试图查后端日志,发现也没有什么有价值的日志,几乎就是一句 internal server error

期望
有更多的日志指引如何避免此问题
或者提升goproxy的健壮性。

现象 我们基于goproxy@0.7.2版本搭建的了内部goproxy服务,代码如下:

package main

import (
	"github.com/goproxy/goproxy"
	"net/http"
	"os"
)

func main() {
	http.ListenAndServe(":9080", &goproxy.Goproxy{
		GoBinEnv: append(
			os.Environ(),
			"GOPROXY=https://goproxy.cn",  // 使用 Goproxy.cn 作为上游代理
			"GOPRIVATE=*.xxx.com", // 解决私有模块的拉取问题(配置成公司内部的代码源)
		),
		ProxiedSUMDBs: []string{
			"sum.golang.org https://goproxy.cn/sumdb/sum.golang.org", // 代理默认的校验和数据库
		},
	})
}

基于go-1.16.1编译后,部署了若干台机器。运行一段时间后,接到反馈拉取某些golang模块会出现500错误,例如: curl "http://127.0.0.1:9080/github.com/bombsimon/logrusr/@v/v1.0.0.mod" 会返回错误: "internal server error" 状态码是500 但访问其他资源是ok的,就是某些资源始终都是这个500错误(其他机器上正常)。 然后,重启goproxy服务后,再curl则正常了。

** 问题频率 ** 随机在不同的机器上都出现这个问题,访问某些资源(资源有随机性,基本是github.com的)时500错误。 重启后在1个星期到2天之间就会重新出现此问题。 我采取的应对措施是:针对出现了500错误的资源url进行监控,发现500则重启goproxy 但后来发现这个方法也不能保证服务稳定性,因为总是有各种各样的github.com的资源会出现500, 试图查后端日志,发现也没有什么有价值的日志,几乎就是一句 internal server error

期望 有更多的日志指引如何避免此问题 或者提升goproxy的健壮性。

我也遇见过,私有代理会报错

只显示一句 internal server error 是有意在向请求方隐藏后端的错误详情,但这句话应该只是出现在响应主体中才对。此外的详细错误信息会交给 goproxy.Goproxy.ErrorLogger 去记录,不过记录的内容的确缺少索引,难以找到对应的问题请求,这部分需要改善一下。感谢反馈!