Проксирование запросов в golang с помощью nginx
Я собираюсь использовать прокси для своих запросов. В коде я это делаю так:
proxyUrl, err := url.Parse(ProxyServerUrl) // proxyUrl - "http://nginxHost:nginxPort"
if err != nil {...}
client.Transport = &http.Transport{Proxy: http.ProxyURL(proxyUrl)}
resp, err := client.Get(requestUrl) // requestUrl - "https://domain/..."
...
Мне нужно как-то поднять и настроить nginx чтобы я мог его использовать в своем коде, как proxyUrl. По большей части меня интересует содержание nginx.conf для этого кейса.
Ответы (1 шт):
в конфиге nginx можно перенаправлять входящие запросы на другой сервер через proxy_pass.
server {
listen 80;
server_name ru.stackoverflow.com;
...
location /match/here {
proxy_pass http://example.com;
}
location / {
proxy_pass http://192.168.XX.YY;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
}
}
В примере /match/here в конце описания сервера не указан URI адрес. При получении запроса, соответствующего этой настройке, он будет без изменения передан вышестоящему серверу. Например, при обращении к /match/here/please, URI будет отправлен по адресу http://example.com/match/here/please.
Во втором примере заголовок host соответствующего запроса будет изменен на значение переменной $host, которое должно содержать изначально запрошенный хост. Заголовок X-Forwarded-Proto дает вышестоящему серверу знать о том, какая схема была использована при изначальном запросе (http/https).
X-Real-IP имеет значение IP адреса клиента. Заголовок X-Forwarded-For содержит список прокси серверов, по которым прошел запрос до настоящего момента. В данном примере мы присваиваем ему значение переменной $proxy_add_x_forwarded_for. Она содержит в себе полученный заголовок X-Forwarder-For плюс добавляет свой сервер в этот список.
подробнее тут