Как сделать обратный прокси?

121
22

У меня есть сервер, написанный на Go. Я хочу написать для него обратный прокси-сервер. Сервер скомпилирован в один двоичный файл. Когда я пытаюсь получить к нему доступ через прокси-сервер, он возвращает только HTML-страницу без привязки к сценариям CSS и JS. Как я могу организовать передачу статических файлов?

package main

import (
"log"
"net/http"
"net/http/httputil"
"net/url"
"time"
)

func main() {
mux := http.NewServeMux()
u1, _ := url.Parse("http://localhost:8080/")
proxy := httputil.NewSingleHostReverseProxy(u1)
mux.Handle("/app1", proxy)

serv := &http.Server{
Addr: ":9090",
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
Handler: mux,
}

err := serv.ListenAndServe()
if err != nil {
log.Fatal("ListenAndServe: ", err)
}

}

спросил(а) 2021-01-19T09:13:29+03:00 6 месяцев, 2 недели назад
1
Решение
89

Написание обратного прокси-сервера является сложной задачей. Если вы планируете выставить его в общедоступном Интернете, я предлагаю использовать существующий, например, Caddyserver, который написан на Go и все еще бесплатный, если вы компилируете его самостоятельно, вместо использования предварительно скомпилированных двоичных файлов. Исходный код Caddyserver также может дать вам идеи, как реализовать его самостоятельно, если вы все еще хотите реализовать эту идею.

К вашему более конкретному вопросу об обслуживании файлов: это можно сделать с помощью метода http.ServeFile или проще с помощью методов httprouter ServeFiles или FileServer. См. Https://github.com/julienschmidt/httprouter#static-files.

ответил(а) 2021-01-19T09:13:29+03:00 6 месяцев, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема