2017-07-25 87 views
0

我正在使用Golang应用程序和Caddy作为HTTP服务器。 golang应用拒绝每个http连接,它只能通过HTTPS使用。此应用程序是其他应用程序使用的一种API /服务。因为它需要HTTPS我安装了Caddy,这样我就可以利用自动SSL证书并使用代理在端口之间切换。HTTPS代理与球童

该应用程序运行在端口9000,因此,消费者将只写mysite.com和球童应负责重定向请求到端口9000,但维护HTTPS。该网站的球童配置是:

mysite.com { 
    proxy/:9000 { 
     max_fails 1 
    } 
    log logfile 
} 

不过,看起来像代理制作HTTPS丢失。我查了日志应用(球童没有日志),我得到这个:

http: TLS handshake error from xxx.xxx.xxx.xxx:xxxx: tls: oversized record received with length 21536 

所以,基于这个错误,我看起来像由球童做出的HTTP代理,失去了HTTPS。我能做什么?

+0

要清楚的是端口9000监听http或https? – captncraig

+3

如果它正在侦听https,则应尝试'proxy/https:// localhost:9000' –

+0

@captncraig HTTPS。谢谢! –

回答

6

caddy docs

是目标端点代理。至少需要一个, 但可指定多个。如果方案(http/https)不是指定的 ,则使用http。 Unix套接字也可以用前缀 “unix:”来使用。

因此,也许它正在发送HTTP请求向代理HTTPS端点。

是否

mysite.com { 
    proxy/https://localhost:9000 { 
     max_fails 1 
    } 
    log logfile 
} 

解决这个问题?

如果是这样的话,您可能不需要使用您的应用:9000来收听https。它可以简化您的部署或证书管理,让它监听http并让球童管理所有证书。

+0

或者摆脱球童,因为你只是使用Go http服务器来代理Go http服务器,这没有任何好处。 – Adrian

+0

@Adrian大概他喜欢Let's Encrypt整合从球童。在他自己的代码中可以用其他方式获得,但是球童很容易投入。 – captncraig

+0

因此,autocert,加上,* OP已经从他们自己的app *中暴露HTTPS,这就是问题所在(Caddy正在发送HTTP流量,当应用程序期望HTTPS),这意味着*他们已经必须处理证书*。在给定的情况下,凯迪添加零值。 – Adrian