Назад | Перейти на главную страницу

nginx: привязать proxy_bind к случайному IP-адресу в диапазоне

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

В настоящее время у меня есть конфигурация, размещенная ниже. Однако по какой-то причине nginx не прослушивает порт 80, хотя конфигурация загружается нормально. Я получаю отказ в соединении при попытке доступа к серверу.

Я ошибаюсь?

server {
  listen 80;
  listen [::]:80;

  server_name my.server.name;

  location / {
    # proxy all requests to destination
    proxy_pass https://destination;

    # generate random IPv6 between IPv6Prefix::0 and IPv6Prefix::13
    set_by_lua_block $ip { return 'IPv6Prefix::' .. string.format('%x', math.random(0, 19)) }
    proxy_bind $ip;

    # keep connections alive
    proxy_http_version 1.1;
    proxy_set_header Connection '';
  }
}

Чтобы проверить, прослушивает ли Nginx порт 80 на том же сервере, вы можете запустить:

sudo netstat -nlp | grep nginx

Вы должны получить результат, соответствующий Nginx, сообщив, что он прослушивает порт 80. Если это сработает, следующим тестом будет доступ к Nginx изнутри сервера через HTTP:

curl http://127.0.0.1

Если это сработает, проблема в брандмауэре или другой сетевой проблеме. Убедитесь, что брандмауэр на сервере разрешает входящий HTTP, если он у вас запущен. Если вы находитесь в такой среде, как AWS, вам также может потребоваться проверить, разрешают ли правила группы безопасности также входящие HTTP-запросы к хосту.

Что касается вашего прокси-кода, обратите внимание, что прокси-привязка предназначена для привязки к местный IP-адреса. То есть IP-адреса, которые уже назначены аппарату. Для того, чтобы это сработало, вам, кажется, нужен дополнительный код для запуска перед запуском Nginx, который назначает каждый IP-адрес в целевом диапазоне вашей машине, если ваша ОС и сетевое оборудование поддерживают это.

Для безопасной работы все IP-адреса также должны быть неиспользованными, поскольку широковещательная передача двух машин с одним и тем же IP-адресом может вызвать проблемы.