编辑
2026-02-03
日常随记
00

在申请好域名后,需要进一步申请SSL证书才可以让别人访问你的网站时,是一个安全的连接

SSL证

编辑
2026-02-02
日常随记
00

docker中配置的nginx,nginx对外统一暴露服务,其他的服务都以docker的方式在服务器

编辑
2025-07-18
日常随记
00
编辑
2025-03-31
日常随记
00

正常如果只使用vanblog时,可以直接通过腾讯云域名配置到主机ip,开放80,443端口,就可以直接访问vanblog,但因为作者这个域名除了想访问vanblog外,还想做其他的用途,例如搭建api服务器等,因此额外部署nginx

链路

sequenceDiagram
浏览器->>nginx: 通过80/443端口
nginx->>vanblog:通过80端口 

部署过程

前提:在腾讯云已经申请好域名

  • 申请免费证书,并下载证书,申请地址
  • 上传证书到云服务器
  • 配置nginx
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
编辑
2025-01-15
日常随记
00

在使用腾讯云的cos的sdk过程中,发现现网有异常反馈,返回的错误就一个EOF,针对这个问题,做个一个排查记录

腾讯云cos-sdk路径:https://github.com/tencentyun/qcloud-cos-sts-sdk/blob/master/go/sts.go#L130

源码分析

在上述源码中,我们可以看到如下代码,当初始化Cosclient的时候,如果没有传入http.Client,会使用默认的 Clipboard_Screenshot_1736946026.png

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

Clipboard_Screenshot_1736946132.png

这就导致在高并发的情况下,有可能长连接超时,服务端已经给客户端发了FIN,然后客户端此时触发了POST请求,因为服务端已经关了连接,所以读到了EOF,导致报错。

解决办法

既然知道了问题,解决的办法也就简单了

  • 自定义一个client,关闭长连接
go
tr := &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)
  • 针对每一个用户获取上传凭证时,添加缓存(凭证本来就是有时效的)授权路径时,可以写稍微通用点的

Clipboard_Screenshot_1736946454.png