给 gogs 加上 let's entrypt 证书

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

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

步骤如下:

首先,git clone 获取脚本

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

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

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

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

1
acme.sh --renew -d yourdomain.com

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

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

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

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

1
2
ssl_certificate path/to/fullcain.pem;
ssl_certificate_key path/to/yourdomain.com.key;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
upstream gogs {
server 127.0.0.1:3000 weight=1;
}
server {
listen 443;
server_name yourdomain.com;
ssl on;
ssl_certificate path/to/fullcain.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不需要配置。