本文目錄一覽:
golang 反向代理實例
首先解釋一下反向代理,所謂的反向代理就是代理服務器,充當Web服務器網關的代理服務器。當請求發送到使用反向代理的Web服務器時,他們將先轉到反向代理,由該代理將確定是將其路由到制定的Web服務器。
這個程序是將 本地的8086 端口作為代理服務器,代理上篇 golang HTTP實例 裏面的8090端口
核心只有一個函數 httputil.NewSingleHostReverseProxy
兩個服務同時運行
效果如下:
代理服務器訪問 8086端口時候
訪問原始的端口8090時候
golang一個端口怎麼同時提供http和https
1、首先使用一個公共的端口作為監聽,讓HTTP和HTTPS服務分別監聽在各自的端口上。
2、其次在公共端口服務區分這是HTTP請求還是HTTPS請求。
3、最後各自轉發到所服務的監聽即可。
Golang 網絡編程絲綢之路 – TCP/UDP 地址解析
TL;DR 在使用 Golang 編寫 TCP/UDP socket 的時候,第一步做的就是地址解析。
該函數返回的地址包含的信息如下:
TCPAddr 里, IP 既可以是 IPv4 地址,也可以是 IPv6 地址。 Port 就是端口了。 Zone 是 IPv6 本地地址所在的區域。
從返回結果看該函數的參數, network 指 address 的網絡類型; address 指要解析的地址,會從中解析出我們想要的 IP , Port 和 Zone 。
從源碼中可以看出,參數 network 只能是如下四個值,否則會得到一個錯誤。
解析過程跟 ResolveTCPAddr 的一樣,不過得到的是 *UDPAddr 。
UDPAddr 包含的信息如下:
Golang 端口轉發工具
初學go,寫一個端口轉發工具。很方便的小工具,希望能對大家學習go語言有所幫助。
“`Golang
package main
import(
“fmt”
“io”
“net”
“sync”
)
varlocksync.Mutex
vartrueList[]string
varipstring
varliststring
funcmain(){
ip=”0.0.0.0:888″
server()
}
funcserver(){
fmt.Printf(“Listening%s”,ip)
lis,err:=net.Listen(“tcp”,ip)
iferr!=nil{
fmt.Println(err)
return
}
deferlis.Close()
for{
conn,err:=lis.Accept()
iferr!=nil{
fmt.Println(“建立連接錯誤:%v\n”,err)
continue
}
fmt.Println(conn.RemoteAddr(),conn.LocalAddr())
gohandle(conn)
}
}
funchandle(sconnnet.Conn){
defersconn.Close()
ip:=”127.0.0.1:8888″
dconn,err:=net.Dial(“tcp”,ip)
iferr!=nil{
fmt.Printf(“連接%v失敗:%v\n”,ip,err)
return
}
ExitChan:=make(chanbool,1)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(dconn,sconn)
ExitChan-true
}(sconn,dconn,ExitChan)
gofunc(sconnnet.Conn,dconnnet.Conn,Exitchanbool){
io.Copy(sconn,dconn)
ExitChan-true
}(sconn,dconn,ExitChan)
-ExitChan
dconn.Close()
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/309406.html