2017-02-17 86 views
0

我在泊塢窗以下設置:NGINX SSL passthrough無法正常工作?

專用服務器< - > NGINX < - >公共服務器

我需要的NGINX服務器工作既扭轉和使用SSL直通轉發代理。我在網上找到了以下配置實現這一目標(注意,正向代理,我總是將數據包發送到同一目的地,公共服務器,在proxy_pass硬編碼):

stream { 
     upstream backend { 
       server <private server IP address>:8080; 
     } 
     # Reverse proxy 
     server { 
       listen 9090; 
       proxy_pass backend; 
     } 

     # Forward proxy 
     server{ 
       listen 9092; 
       proxy_pass <public server IP address>:8080; 
     } 
} 

我沒有嘗試過的反向代理能力,但作爲轉發代理已經給我的問題。特別是,當私人服務器嘗試連接到公共服務器時,TLS會話失敗。

在公共服務器,它說:

http: TLS handshake error from <PUBLIC_SERVER_IP>:49848: tls: oversized record received with length 20037 

而私人服務器上,它說:

Post https://<PUBLIC_SERVER_IP>:8080/subscribe: malformed HTTP response "\x15\x03\x01\x00\x02\x02\x16" 

這是我與tshark的看到:

PRIVATE_SRV ? NGINX TCP 74 48044?9092 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1209793579 TSecr=0 WS=128 

NGINX ? PRIVATE_SRV TCP 74 9092?48044 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=1209793579 TSecr=1209793579 WS=128 

PRIVATE_SRV ? NGINX TCP 66 48044?9092 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=1209793579 TSecr=1209793579 

NGINX ? PUBLIC_SRV TCP 74 49848?8080 [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=1209793579 TSecr=0 WS=128 

PRIVATE_SRV ? NGINX HTTP 161 CONNECT <PUBLIC_SRV_IP>:8080 HTTP/1.1 

NGINX ? PRIVATE_SRV TCP 66 9092?48044 [ACK] Seq=1 Ack=96 Win=29056 Len=0 TSval=1209793580 TSecr=1209793580 

PUBLIC_SRV ? NGINX TCP 74 8080?49848 [SYN, ACK] Seq=0 Ack=1 Win=28960 Len=0 MSS=1460 SACK_PERM=1 TSval=854036623 TSecr=1209793579 WS=128 

NGINX ? PUBLIC_SRV TCP 66 49848?8080 [ACK] Seq=1 Ack=1 Win=29312 Len=0 TSval=1209793580 TSecr=854036623 

NGINX ? PUBLIC_SRV HTTP 161 CONNECT <PUBLIC_SRV_IP>:8080 HTTP/1.1 

PUBLIC_SRV ? NGINX TCP 66 8080?49848 [ACK] Seq=1 Ack=96 Win=29056 Len=0 TSval=854036623 TSecr=1209793580 

PUBLIC_SRV ? NGINX HTTP 73 Continuation 

NGINX ? PUBLIC_SRV TCP 66 49848?8080 [ACK] Seq=96 Ack=8 Win=29312 Len=0 TSval=1209793581 TSecr=854036623 

NGINX ? PRIVATE_SRV HTTP 73 Continuation 

PRIVATE_SRV ? NGINX TCP 66 48044?9092 [ACK] Seq=96 Ack=8 Win=29312 Len=0 TSval=1209793581 TSecr=1209793581 

PUBLIC_SRV ? NGINX TCP 66 8080?49848 [FIN, ACK] Seq=8 Ack=96 Win=29056 Len=0 TSval=854036624 TSecr=1209793580 

NGINX ? PUBLIC_SRV TCP 66 49848?8080 [FIN, ACK] Seq=96 Ack=9 Win=29312 Len=0 TSval=1209793581 TSecr=854036624 

NGINX ? PRIVATE_SRV TCP 66 9092?48044 [FIN, ACK] Seq=8 Ack=96 Win=29056 Len=0 TSval=1209793581 TSecr=1209793581 

PRIVATE_SRV ? NGINX TCP 66 48044?9092 [FIN, ACK] Seq=96 Ack=9 Win=29312 Len=0 TSval=1209793581 TSecr=1209793581 

NGINX ? PRIVATE_SRV TCP 66 9092?48044 [ACK] Seq=9 Ack=97 Win=29056 Len=0 TSval=1209793581 TSecr=1209793581 

PUBLIC_SRV ? NGINX TCP 66 8080?49848 [ACK] Seq=9 Ack=97 Win=29056 Len=0 TSval=854036624 TSecr=1209793581 

你有什麼建議如何調試呢?我正在使用HTTPS POST事項嗎?對於NGINX,我不使用SSL的默認端口443有什麼關係?

非常感謝您給我的所有幫助。

P.S. 如果我刪除NGINX代理,一切正常。

回答

1

我發現了這個問題。這實際上是一個代碼問題。我正在使用Golang。問題是,我是配置代理服務器爲:

*httpsCl = http.Client{ 
     Transport: &http.Transport{ 
      Proxy: http.ProxyURL(proxyUrl), 
      TLSClientConfig: tlsConfig 
     }, 
} 

,這樣做私人服務器期待交談的代理,如果我們使用的是SSL直通不工作。相反,我必須配置代理爲:

*httpsCl = http.Client{ 
       Transport: &http.Transport{ 
         Dial: func(network, addr string) (net.Conn, error){ 
            return net.Dial("tcp", proxyUrl.Host) 
           }, 
         TLSClientConfig: tlsConfig 
       }, 
} 

謝謝大家!