想给自己的gogs加个证书,现在 let's entrypt 这么流行,而且免费,所以就用它了!

搜了一下发现可以又很多工具可以很方便地生成证书,搜了一下,选中了acme.sh

步骤如下:

首先,git clone 获取脚本

git clone https://github.com/Neilpang/acme.sh.git

let‘s entrypt 需要验证域名所有权,有好几种方式,有验证文件的,也有验证dns的。
gogs验证文件不太方便,所以使用验证dns的方法

acme.sh --issue --dns -d  yourdomain.com

之后它会提示让你设置一下子域名的txt记录,设置好之后,运行下面的命令

acme.sh --renew -d yourdomain.com

之后它就会自动生成证书,告诉你放在什么地方。

那么nginx怎么使用呢?
首先,生成ssl_certificate

# 文件路径已省略,需要自己补上
cat yourdomain.com.key fullchain.cer > fullchain.pem

之后在nginx的配置文件中加上以上配置就可以了:

ssl_certificate     path/to/fullchain.pem;
ssl_certificate_key  path/to/yourdomain.com.key;

nginx虚拟主机配置文件如下:

upstream gogs {
    server 127.0.0.1:3000 weight=1;
}

server {  
    listen 443;
    server_name yourdomain.com;

    ssl on;
    ssl_certificate path/to/fullchain.pem;
    ssl_certificate_key path/to/yourdomain.com.key;

    location / {
        proxy_set_header   X-Real-IP $remote_addr;
        proxy_set_header   Host      $http_host;
        proxy_pass         http://gogs;
    }
}

如果需要强制https可以见这里
当然也可以启用HSTS, 见这里这里

注意

gogs 本身有配置证书的地方,但是如果要通过 nginx 访问 gogs的话,证书是需要在nginx配置的,gogs不需要配置。