diff --git a/main.go b/main.go index 6adf668..0ec9a0a 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,6 @@ package main import ( - "crypto/tls" "fmt" "net/http" @@ -10,56 +9,47 @@ import ( ) func main() { - // 1. Настройка менеджера сертификатов certManager := autocert.Manager{ Prompt: autocert.AcceptTOS, - HostPolicy: autocert.HostWhitelist("qgo-server.quizer.space"), // ЗАМЕНИТЕ НА ВАШ ДОМЕН - Cache: autocert.DirCache("certs"), // Папка для хранения ключей + HostPolicy: autocert.HostWhitelist("qgo-server.quizer.space"), + Cache: autocert.DirCache("certs"), } mux := http.NewServeMux() mux.HandleFunc("/api/hello", func(w http.ResponseWriter, r *http.Request) { - // Добавляем CORS для вашего фронтенда - w.Header().Set("Access-Control-Allow-Origin", "https://your-svelte-app.com") + // CORS + w.Header().Set("Access-Control-Allow-Origin", "http://localhost:5173") // Или твой фронт домен w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") - w.Header().Set("Alt-Svc", `h3=":443"; ma=86400`) // Порт 443 стандартный для HTTPS + w.Header().Set("Alt-Svc", `h3=":443"; ma=86400`) - fmt.Printf("Запрос по протоколу: %s\n", r.Proto) - w.Write([]byte(`{"message": "Работает через Let's Encrypt и QUIC!"}`)) + fmt.Printf("Запрос: %s | Протокол: %s\n", r.URL.Path, r.Proto) + w.Write([]byte(`{"message": "QUIC + Let's Encrypt работают!"}`)) }) - // Настройка TLS конфигурации для QUIC - tlsConfig := &tls.Config{ - GetCertificate: certManager.GetCertificate, - NextProtos: []string{"h3", "h3-29"}, // Поддержка разных версий HTTP/3 - } + // Стандартный TLS конфиг от autocert + tlsConfig := certManager.TLSConfig() + tlsConfig.NextProtos = []string{"h3", "h3-29", "h2", "http/1.1"} - // 2. Запуск HTTP/3 (UDP) на порту 443 + // 1. Порт 80 для Let's Encrypt (обязательно) + go http.ListenAndServe(":80", certManager.HTTPHandler(nil)) + + // 2. HTTP/3 (UDP) на 443 go func() { server := &http3.Server{ Addr: ":443", Handler: mux, TLSConfig: tlsConfig, } - fmt.Println("Запуск QUIC на :443 UDP...") - if err := server.ListenAndServe(); err != nil { - fmt.Printf("Ошибка QUIC: %v\n", err) - } + fmt.Println("Запуск QUIC (UDP) на 443...") + server.ListenAndServe() }() - // 3. Запуск стандартного HTTPS (TCP) на порту 443 - // Это также необходимо для выдачи сертификатов через ACME - fmt.Println("Запуск HTTPS на :443 TCP...") - httpsServer := &http.Server{ + // 3. HTTPS (TCP) на 443 + fmt.Println("Запуск HTTPS (TCP) на 443...") + server := &http.Server{ Addr: ":443", Handler: mux, TLSConfig: tlsConfig, } - - // Важно: для Let's Encrypt также нужен сервер на порту 80 (HTTP) - go http.ListenAndServe(":80", certManager.HTTPHandler(nil)) - - if err := httpsServer.ListenAndServeTLS("", ""); err != nil { - panic(err) - } + server.ListenAndServeTLS("", "") }