記事概要
簡易WEBサーバを作成。
スクリプト
package main
import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"os"
)
func main() {
port := "8080" // デフォルトのポート番号
ip := "0.0.0.0" // IP
// コマンドライン引数からポート番号を取得
if len(os.Args) > 1 {
port = os.Args[1]
}
// / へのアクセスが来た時に dist フォルダ内のコンテンツを表示するハンドラを設定
http.Handle("/", http.FileServer(http.Dir("./dist")))
// /hoge へのアクセスが来た時にリダイレクトするハンドラを設定
http.HandleFunc("/hoge", func(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "http://localhost:3000", http.StatusFound)
})
// /piyo へのアクセスが来た時にリバースプロキシとして転送するハンドラを設定
filesProxy := httputil.NewSingleHostReverseProxy(&url.URL{
Scheme: "http",
Host: "localhost:5001",
})
http.Handle("/piyo", http.StripPrefix("/", filesProxy))
addr := ip + ":" + port
log.Print("サーバーを起動 => " + "http://" + addr)
// サーバーを起動し、指定したIPアドレスとポート番号で待機
err := http.ListenAndServe(addr, nil)
if err != nil {
log.Fatal("サーバーの起動に失敗しました: ", err)
}
}
説明
結構忘れていたので、ChartGPTに手伝ってもらった。
- distフォルダの下を見ている。
-
http://localhost/hoge
をhttp://localhost:3000
にリダイレクト。 -
http://localhost/piyo
をhttp://localhost:5001/piyo
にリバースプロキシ。