acme泛域名证书+Nginx反向代理搭建GolangWeb服务

in 运维Go with 0 comment

前言

突然需要一个二维码生成器,遂用Golang写一个小小的工具,但是因为用了新的二级域名,需要重新配置https,于是想要弄一个泛证书,
前文有用acme免费签了一个www.gavinys.com的https证书,那么我们如何签一个泛证书呢?

acme签证-DNS模式

前文是用域名+网站根目录的形式,由acme自动在网站根目录生成一个txt文件,然后远程访问这个txt文件来证明你的域名所有权的,如果要做泛证书,当然就不能用这个方法了,因为可能存在多个站点。
这个时候可以使用acme的dns api方法,原理就是提供你的DNS服务商的api-key,由acme访问DNS服务商的API来校验域名的所有权。
我是DNSPOD服务解析的,查询acme-github的文档,提供:

export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"

acme.sh   --issue   --dns dns_dp   -d *.gavinys.com

其中DP_ID,DP_KEY可以在DNSPOD控制台直接设置,如图所示:
1.png
签证成功后,自动生成了证书,继续执行以下命令:

acme.sh  --installcert  -d  *.gavinys.com   \
--key-file   /usr/local/openresty/nginx/conf/ssl/gavinys.com/gavinys.key \
--fullchain-file /usr/local/openresty/nginx/conf/ssl/gavinys.com/fullchain.cer \
--reloadcmd  "openresty -s reload"

再重新配置自己的nginx配置,重载即可:

Nginx反向代理Golang Web服务

我们可以轻易的使用Go搭建一个Web服务,示例如下

package main
import (
    "fmt"
    "net/http"
)

func qr(){
    fmt.Fprintf("hello world")
}
func main() {
    http.HandleFunc("/generate_qrcode", qr)

    err := http.ListenAndServe("127.0.0.1:8001", nil)
    if err != nil {
    fmt.Println(err)
    }
}

上文便已经将本机的8001端口绑定上了,可以访问http://127.0.0.1:8001,就可以看到“hello world”了
那我们如何与Nginx服务绑定一起使用呢?
由PHP-FPM与Nginx服务的关系可以推得,我们只需要将Nginx配置成端口转发到8001处理即可:

server {
        listen 80;
        server_name qrcode.gavinys.com;
        rewrite ^(.*)$  https://$host$1 permanent;
        location / {
                proxy_pass http://127.0.0.1:8001;
        }
}

server {
        listen 443 http2;
        server_name qrcode.gavinys.com;
        ssl on;
        ssl_certificate      /usr/local/openresty/nginx/conf/ssl/gavinys.com/fullchain.cer;
        ssl_certificate_key  /usr/local/openresty/nginx/conf/ssl/gavinys.com/gavinys.key;

        location / {
                proxy_pass http://127.0.0.1:8001;
        }
}

proxy_pass即为Nginx反向代理,Nginx收到请求后,转给127.0.0.1的8001端口处理,再原样返回值,而8001就是Golang语言处理返回的。

Responses