Собственный веб-сервер Certbot https возвращает мне 404 страница не найдена - PullRequest
0 голосов
/ 29 ноября 2018

У меня довольно просто перейти на веб-сервер https

Вот код:

package main

import (
    // "fmt"
    // "io"
    "net/http"
    "log"
)

func HelloServer(w http.ResponseWriter, req *http.Request) {
    w.Header().Set("Content-Type", "text/plain")
    w.Write([]byte("This is an example server.\n"))
    // fmt.Fprintf(w, "This is an example server.\n")
    // io.WriteString(w, "This is an example server.\n")
}

func main() {
    http.HandleFunc("/hello", HelloServer)
    err := http.ListenAndServeTLS(":8085", "fullchain.pem", "privkey.pem", nil)
//    err := http.ListenAndServeTLS(":8085", "certificate_ca.crt", "certificate.csr", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

Он прослушивает порт 8085, который открыт посредством тарифа.Я использую сертификат SSL, сгенерированный certbot:

sudo certbot certonly --standalone -d example.com

Поэтому я построил веб-сервер, используя следующие сгенерированные файлы:

err := http.ListenAndServeTLS(":8085", "fullchain.pem", "privkey.pem", nil)

Вот состояние порта:

$ sudo netstat -tulpn | grep 8085
tcp6       0      0 :::8085                 :::*                    LISTEN      23429/hello

$ sudo ufw status | grep 8085
8085/tcp                   ALLOW       Anywhere
8085/tcp (v6)              ALLOW       Anywhere (v6)

Поэтому, когда я пытаюсь с другой машины:

$ curl -sL https://example.com:8085
404 page not found

Веб-сервер работает на DigitalOcean.Нужно ли как-то настроить мою каплю?Не уверен, что я пропустил?Также у меня есть certificate.crt, certificate_ca.crt, certificate.csr файлов, которые я получил от компании, которая продала мне домен.Должен ли я использовать эти файлы в любом случае?Мне это нужно для URI перенаправления OAuth.

1 Ответ

0 голосов
/ 30 ноября 2018

Вы настроили обработчик для пути URL /hello, но вы не настроили обработчик для пути /.Таким образом, когда вы пытаетесь загрузить этот путь, вы получаете 404.

Если вы попытаетесь загрузить https://example.com:8085/hello, вы увидите пример текста.

Вы также можете настроить маршрут для/, например:

 http.HandleFunc("/", HelloServer)

Обратите внимание, что, поскольку это соответствует всем возможным URL-адресам, вам необходимо явно проверить URL-адрес, если вы хотите сопоставить только домашнюю страницу, например:

    if req.URL.Path != "/" {
        http.NotFound(w, req)
        return
    }

Вам также следует рассмотреть возможность использования более гибкого мультиплексора, например, gorilla / mux.

...