Какую конфигурацию мне не хватает для httputil.NewSingleHostReverseProxy? - PullRequest
0 голосов
/ 04 июля 2018

Приведенный ниже код вызывает ошибку ниже. Когда я набираю "http://www.cnn.com/favicon.ico" прямо в любом браузере, это работает без проблем. Я предполагаю, что мне не хватает какой-то критической конфигурации для обратного прокси-сервера. Какая минимальная конфигурация необходима для того, чтобы заставить это работать?

package main

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

func main(){
    url, _ := url.Parse("http://www.cnn.com/favicon.ico")
    proxy := httputil.NewSingleHostReverseProxy(url)
    http.HandleFunc("/", proxy.ServeHTTP)
    log.Fatal(http.ListenAndServe(":9090", nil))
}

Быстрая ошибка: неизвестный домен: localhost. Пожалуйста, проверьте, что этот домен был добавлен в сервис.

Подробности: cache-lax8625-LAX

С 4 июля!

1 Ответ

0 голосов
/ 04 июля 2018

Я сделал следующие 2 изменения, чтобы заставить его работать:

Во-первых, укажите прокси на www.cnn.com вместо www.cnn.com/favicon.ico. Конечно, теперь мы должны сделать наш запрос на localhost:9090/favicon.ico.

Затем установите поле Host запроса прокси для целевого хоста, а не для хоста прокси, который является localhost.

Код выглядит примерно так:

package main

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

type Director func(*http.Request)

func (f Director) Then(g Director) Director {
    return func(req *http.Request) {
        f(req)
        g(req)
    }
}

func hostDirector(host string) Director {
    return func(req *http.Request) {
        req.Host = host
    }
}

func main() {
    url, _ := url.Parse("http://www.cnn.com")
    proxy := httputil.NewSingleHostReverseProxy(url)

    d := proxy.Director
    // sequence the default director with our host director
    proxy.Director = Director(d).Then(hostDirector(url.Hostname()))

    http.Handle("/", proxy)
    log.Fatal(http.ListenAndServe(":9090", nil))
}
...