nginx以及go-gin使用腾讯云免费证书部署https

2,237 阅读1分钟

下载证书

使用nginx证书

nginx配置

请将xxx.crt与xxx.key上传到服务器与nginx.conf处于同级目录。

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    server {
        listen 443;
        root /usr/share/nginx/html/; #站点目录
        server_name www.xxx.com; #填写绑定证书的域名
        ssl on;
        index index.html index.htm;
        ssl_certificate  xxx.crt; #证书文件名称
        ssl_certificate_key xxx.key; #私钥文件名称
        ssl_session_timeout 5m;
        ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        location / {
                index index.html index.htm;
        }
    }
}

server 是https的配置。默认端口是443,root是站点根目录,请根据nginx当前使用的站点目录进行配置。xxx请根据实际名称填写。 配置完成重启nginx,使用https访问自己的域名。更多参考

go-gin配置https

  • 具体代码

gin可以直接使用nginx的证书,然而本地无法测试(签发的证书不能被任意域名使用),需要部署到被颁发证书的服务器进行测试。

router := gin.Default()
router.Use(middleware.TlsHandler())
router.Use(middleware.CrossDomain())
router.RunTLS(":8000", "./keys/xxx.crt", "./keys/xxx.key")

TlsHandler方法

package middleware

import (
	"github.com/gin-gonic/gin"
	"github.com/unrolled/secure"
)

// TlsHandler .
func TlsHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		secureMiddleware := secure.New(secure.Options{
			SSLRedirect: true,
			SSLHost:     "localhost:8000",
		})
		err := secureMiddleware.Process(c.Writer, c.Request)

		// If there was an error, do not continue.
		if err != nil {
			return
		}

		c.Next()
	}
}

缺少的包请自行下载,CrossDomain方法是跨域设置与本主题无关。

  • 测试

将go程序编译部署到服务器,并且在可执行行文件的同级目录新建keys文件夹,将Nginx的xxx.crt和xxx.key两个文件复制到keys目录下,最后运行程序测试https。