GOLANG实现的HTTP转HTTPS的代理

有时候需要将后端的HTTP服务,转成HTTPS,可以用一个代理。 > Reamark: 如果是GOLANG的后端服务,可以直接用库`go-oryx-lib/https`。 这个代理支持自签名的证书,也支持[letsencrypt](https://letsencrypt.org)的证书。 > Remark: Letsencrypt只支持少量域名的情况,比如自己的网站,它会有请求次数限制,另外CA是letsencrypt的,商业用户不适合用。 我们有个HTTP API, [SRS Version](http://ossrs.net:1985/api/v1/versions): ``` { "code": 0, "server": 12504, "data": { "major": 2, "minor": 0, "revision": 243, "version": "2.0.243" } } ``` 下面演示实现HTTPS的代理。 ## Self-sign Certificate 自签名证书可以用在测试中,先生成私钥`server.key`和证书`server.crt`: ``` openssl genrsa -out server.key 2048 && openssl req -new -x509 -key server.key -out server.crt -days 365 ``` > Remark: 生成证书时会有很多提问,直接回车就好了。还可以参考openssl的文档,直接在命令行设置这些参数。 生成私钥和证书后,下载HTTPS代理: ``` go get github.com/ossrs/go-oryx/httpx-static ``` > Remark: GOLANG的设置请参考[GO环境配置](http://blog.csdn.net/win_lin/article/details/48265493)。 > Note: 详细参数可以直接运行`httpx-static`程序不带参数,会显示help。 启动服务,代理到[SRS Version](http://ossrs.net:1985/api/v1/versions): ``` sudo $GOPATH/bin/httpx-static -http 80 -https 443 \ -proxy http://ossrs.net:1985/api/v1/versions \ -ssc server.crt -ssk server.key ``` 访问本机HTTP和HTTPS就可以: 1. HTTP: http://localhost/api/v1/versions 1. HTTPS: https://localhost/api/v1/versions > Remark: 浏览器访问自签名证书时,可能会提示不安全,选择`高级`然后`继续浏览`就可以了。 ## LetsEncrypt Certificate 可以使用[letsencrypt](https://letsencrypt.org)签名的证书,在浏览器中会显示合法的绿色,不会提示有错误。参考:[ossrs.net](https://ossrs.net)。 ossrs.net也是使用httpx-static,参数如下: ``` sudo $GOPATH/bin/httpx-static -http 80 -https 443 \ -lets=true -domains ossrs.net ``` > Remark: 注意在局域网的机器无法使用,因为ACME会有反向验证,也就是你的服务器得能在公网访问到。 ## Advance Proxy 如果需要代理所有的API怎么办呢?直接指定父目录就好,如果指定`/`则代理所有的请求。例如: 下面的命令,代理所有的`/api`请求: ``` sudo $GOPATH/bin/httpx-static -http 80 -https 443 \ -proxy http://ossrs.net:1985/api \ -ssc server.crt -ssk server.key ``` 下面的命令,代理所有的请求,相当于做了镜像: ``` sudo $GOPATH/bin/httpx-static -http 80 -https 443 \ -proxy http://ossrs.net/ \ -ssc server.crt -ssk server.key ``` 其他的参数请参考`httpx-static`的参数。

0 个评论

要回复文章请先登录注册