2017-07-25 82 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