Forward Proxy Loadbalancer / failover - PullRequest
0 голосов
/ 12 октября 2019

Пожалуйста, примите во внимание следующую ситуацию: я использую два удаленных прокси-сервера HTTP, http://proxy1:8181 и http://proxy2:8282, и у меня есть приложение, которое GET и POST подключается к различным внешним конечным точкам, используя один из них одновременно.

Эти конечные точки прокси были случайным образом ненадежными, к счастью, по одному за раз. Я ищу способы использовать рабочую конечную точку среди этих двух. Что-то вроде механизма аварийного переключения.

Вот что я хочу сделать: настроить демона, который прослушивает http://127.0.0.1:8000, и регулярно проверять proxy1 и proxy2 в цикле. Затем направьте входящий запрос, используя proxy1, если он исправен, если нет, используйте proxy2

Легче сказать, чем сделать!

Не уверен, что такой балансировщик нагрузки для Fwd Proxies существует - в любом случае, поиск указателей и любая помощь будут оценены!

Я предпочитаю делать это на Голанге, предпочтительно, следующий выбор - C. Для начала, это не так просто, как дать 301, также чтобы успокоить SO * show me the code so far:

package main

import (
    "log"
    "net/http"
)

const (
    port = "8000"
)

func main() {
    listen := ":" + port
    go http.HandleFunc("/", redir)
    log.Fatal(http.ListenAndServe(listen, nil))
}

func redir(w http.ResponseWriter, r *http.Request) {
    log.Println("Hello there!")
    http.Redirect(w, r, "http://pi3/cameras/", 301)
}

Как я вижу:

$ wget -e http_proxy="http://arrow:8000/" -S -O /dev/null http://moooh/cameras/ -d 
<snip>
  HTTP/1.1 301 Moved Permanently
  Content-Type: text/html; charset=utf-8
  Location: http://pi3/cameras/
  Date: Sat, 12 Oct 2019 03:57:00 GMT
  Content-Length: 54
URI content encoding = ‘utf-8’
Location: http://pi3/cameras/ [following]
Skipping 54 bytes of body: [<a href="http://pi3/cameras/">Moved Permanently</a>.

] done.
URI content encoding = None
20 redirections exceeded. // <<<< 
<snip>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...