正常如果只使用vanblog时,可以直接通过腾讯云域名配置到主机ip,开放80,443端口,就可以直接访问vanblog,但因为作者这个域名除了想访问vanblog外,还想做其他的用途,例如搭建api服务器等,因此额外部署nginx
sequenceDiagram
浏览器->>nginx: 通过80/443端口
nginx->>vanblog:通过80端口
前提:在腾讯云已经申请好域名
server { listen 80; server_name nobugs.com.cn; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name nobugs.com.cn; ssl_certificate /etc/nginx/certs/nobugs.com.cn_bundle.crt; ssl_certificate_key /etc/nginx/certs/nobugs.com.cn.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; #access_log /var/log/nginx/host.access.log main; location / { proxy_pass http://vanblog:80; # 这里是容器的名称+容器的端口,不是容器对外暴露的端口 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 传递 HTTPS 协议 root /usr/share/nginx/html; index index.html index.htm; } }
docker run --name nginx -p 80:80 -p 443:443 -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/nginx/certs:/etc/nginx/certs -d --restart=always nginx
在使用腾讯云的cos的sdk过程中,发现现网有异常反馈,返回的错误就一个EOF,针对这个问题,做个一个排查记录
腾讯云cos-sdk路径:https://github.com/tencentyun/qcloud-cos-sts-sdk/blob/master/go/sts.go#L130
在上述源码中,我们可以看到如下代码,当初始化Cosclient的时候,如果没有传入http.Client,会使用默认的

默认的参数中有一个DisableKeepAlives 参数用来控制是否关闭长连接,默认是关闭的

这就导致在高并发的情况下,有可能长连接超时,服务端已经给客户端发了FIN,然后客户端此时触发了POST请求,因为服务端已经关了连接,所以读到了EOF,导致报错。
既然知道了问题,解决的办法也就简单了
gotr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
TLSHandshakeTimeout: 10 * time.Second,
DisableKeepAlives: true,
ResponseHeaderTimeout: 5 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
}
netClient := &http.Client{
Transport: tr,
Timeout: 10 * time.Second,
}
c := sts.NewClient(cosConf.SecretId, cosConf.SecretKey, netClient)
