GoLang HTTPS API

时间:2018-04-07 00:54:49

标签: api ssl go certificate backend

我在使用Plesk的Windows中有一台服务器。

我有一个域名(example.com),我也为此域名购买了SSL证书。

我刚刚成功安装并在我的服务器中配置域和ssl。所以现在我可以使用https://www.example.com或example.com加入我的网站,并将重定向到https:// ....

直到一切正常。

但是现在我已经在GoLang中开发了一个API,由于某种原因无法在443端口开始监听。 (我想也许是因为已经使用过?)所以我改为8081端口。现在,当我想向我的API发出请求时,我必须使用https://www.example.com:8081/api/v1/users

问题是有些应用程序向我显示错误“证书无效”,我认为这是因为端口不是443.我有什么办法可以在443中运行吗?

GO中的代码是:( crt和key是GoDaddy提供的,是我购买SSL的地方)

func main() {

router := NewRouter()



handler := cors.AllowAll().Handler(router)

log.Fatal(http.ListenAndServeTLS(":8081", "tls.crt", "tls.key", handler))
}

1 个答案:

答案 0 :(得分:1)

  1. 在nginx(反向代理)后面运行整个Golang应用程序:

  2. 使用您的域在Nginx中创建虚拟主机服务器块。 https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04

  3. 设置SSL证书

  4. 将该域指向您的Golang应用

    server {
    
        server_name example.com;
    
        location / {
            proxy_pass http://localhost:8081;
            proxy_http_version 1.1;
            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;
            proxy_cache_bypass $http_upgrade;
            proxy_pass_request_headers on;
            proxy_read_timeout 150;
       }
    
        ssl_certificate /path/to/chainfile/example.com/abcd.pem;
        ssl_certificate_key /path/to/privatekeyfile/example.com/abcd.pem;
    
        if ($scheme != "https") {
            return 301 https://$host$request_uri;
        }
    }