@NubasLol

Аналог proxy_pass nginx на языке golang возможно ли реализовать?

Nginx очень круто умеет проксировать запросы а загрузку файлов, но проблема с тем, что бы авторизовать эти запросы и динамически менять urls

Но достаточно написать

location /start {
            proxy_pass http://kinosotik.com/download/malenqkie-chudoviwa?original;
        }


И nginx будет загружать файл с удаленного сайта сразу после перехода по ссылке, поддерживает докачку и т.п

Пробою написать на golang что-то похожее, но выдает 404 оишбку

func main() {
   http.HandleFunc("/", handlerProxy)
   if err := http.ListenAndServe(":4000", nil); err != nil {
       panic(err)
   }
}

func handlerProxy(w http.ResponseWriter, r *http.Request) {
   fmt.Println(r.URL.Host)

   url, _ := url.Parse(fmt.Sprintf("http://kinosotik.com/download/malenqkie-chudoviwa?original"))

    r.Host = url.Host
    r.URL.Scheme = "http"

   proxy := httputil.NewSingleHostReverseProxy(url)
   fmt.Println(r.URL.Host)

   proxy.ServeHTTP(w, r)
}
  • Вопрос задан
  • 83 просмотра
Решения вопроса 2
dimonchik2013
@dimonchik2013
совет, который уже дан - ничего не стоит
чтобы без буфера было, нужно вот этот кусок
body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        http.Error(w, "error reading response body", http.StatusInternalServerError)
        return
    }

    // write status code and body from proxy request into the answer
    w.WriteHeader(resp.StatusCode)
    w.Write(body)


заменить на этот:

w.WriteHeader(resp.StatusCode)
_, err := io.Copy(w, body)
if err != nil {
    http.Error(w, "error reading response body", http.StatusInternalServerError)
    return
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Ovision Санкт-Петербург
от 100 000 до 300 000 ₽
ELMA Санкт-Петербург
от 80 000 до 180 000 ₽