Пожалуйста, примите во внимание следующую ситуацию: я использую два удаленных прокси-сервера 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>