ListenAndServeTLS()
.ListenAndServeTLS()
- 4)?func main() {
var mux = http.NewServeMux()
mux.HandleFunc("/", indexPage)
var serv = &http.Server {
Addr: serverPort,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
}
log.Fatal(serv.ListenAndServeTLS(TLScert, TLSkey, mux))
}
func main() {
var mux = http.NewServeMux()
mux.HandleFunc("/", indexPage)
var serv = &http.Server{
// добавляете параметр
Handler: mux,
Addr: serverPort,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
}
// вызываете с двумя параметрами
log.Fatal(serv.ListenAndServeTLS(TLScert, TLSkey))
}
func indexPage(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
fmt.Fprintf(w, "OK")
}
req -x509 -nodes -newkey rsa:2048 -keyout server.key -out server.crt -days 3650
package main
import (
"log"
"net/http"
"time"
)
var listenAddr = ":9999"
var TLScert = "server.crt"
var TLSkey = "server.key"
var DirS = "/etc"
func main() {
var mux = http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir(DirS)))
var serv = &http.Server{
Addr: listenAddr,
Handler: mux,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
}
log.Fatal(serv.ListenAndServeTLS(TLScert, TLSkey))
}
curl -vvv -k https://localhost:9999/
* Connected to localhost (127.0.0.1) port 9999 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* skipping SSL peer certificate verification
* SSL connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate:
* subject: E=test@test.com,CN=localhost,O=Internet Widgits Pty Ltd,ST=Some-State,C=RU
* start date: Jun 01 10:10:53 2021 GMT
* expire date: May 30 10:10:53 2031 GMT
* common name: localhost
* issuer: E=test@test.com,CN=localhost,O=Internet Widgits Pty Ltd,ST=Some-State,C=RU
> GET / HTTP/1.1
> User-Agent: curl/7.29.0
> Host: localhost:9999
> Accept: */*
>
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Last-Modified: Sun, 23 May 2021 19:48:51 GMT
< Date: Tue, 01 Jun 2021 10:23:20 GMT
< Transfer-Encoding: chunked
<
<pre>
....
<a href="aliases">aliases</a>
<a href="aliases.db">aliases.db</a>
<a href="GeoIP.conf">GeoIP.conf</a>
....
mux.Handle()
, в моем коде это mux.HandleFunc()
. То есть дело было не в FileServer()
.main()
.main()
], а в main()
только сервер и перечисление маршрутов с запуском функции-обработчика:func indexPage(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir(DirS))
}
func main() {
var mux = http.NewServeMux()
mux.Handle("/", indexPage)
var serv = &http.Server{
Handler: mux,
Addr: serverPort,
ReadTimeout: 15 * time.Second,
WriteTimeout: 15 * time.Second,
}
log.Fatal(serv.ListenAndServeTLS(TLScert, TLSkey))
}
indexPage()
? Как ни пытался - ругается. ( type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
func indexPage(w http.ResponseWriter, r *http.Request) {
http.FileServer(http.Dir(DirS)).ServeHTTP(w, r)
}
func FileServer(root FileSystem) Handler {
return &fileHandler{root}
}
main()
. Я хочу обработчики вынести из main()
, чтобы сделать "красиво как у всех", типа (функция Handle()
или HandleFunc()
):http.FileServer()
. Может быть это неоптимально...main()
... "/"
]. mux.HandleFunc("/", indexPage)
mux.HandleFunc("/", about)
mux.HandleFunc("/", contacts)
mux.HandleFunc("/", userPage)
mux.HandleFunc("/about", about)
mux.HandleFunc("/contacts", contacts)
mux.HandleFunc("/user/{user_id}", userPage)
mux.HandleFunc("/", indexPage)