@Bredy

Проксирование исходящего запроса с разных ip?

Использую nest js + next js.
Суть вопроса: Есть микросервис на одном сервере, который производит запрос в сторонне приложение, обрабатывает его и передает на другой сервер для записи в БД. Но запросов надо делать много и для того чтобы обойти ограничение, требуется отправлять запросы с разных ip.
Можно конечно этот микросервис раскидать на разные серверы и будут они там работать, но не целесообразно и запаса по серверу достаточно много.
Как сделать так чтобы на одном сервере, микросервис отправлял код с разных ip.

Ниже представлен контроллер. Есть метод который опрашивает сторонний сервис через их APi, но проблема в том, что я хочу через cron запускать эту задачу для разных ip на одном сервере и не понял пока как это реализовать.
Представил вариант ниже который опробовал но это не работает.
В файле default на сервере настроил nginx, указал несколько location с проксированием на 4 ip адреса для приема входящих запросов, но этот будет исходящий.

ip адреса сервера:
export const serverConfig = {
  servers: [
    { ip: '79.**********', port: 7000 },
    { ip: '79.*********', port: 7000 },
    { ip: '79.*********', port: 7000 },
    { ip: '79.*********', port: 7000 },
  ],
};


Контроллер:
@Controller('posts')
export class PostsController {

  constructor(private readonly postsService: PostsService) {}

  @Cron('0 */10 * * * *')
  @Get('/addNewPosts')
  addNewPosts() {
    let start = 2000
    let pass = 0
    serverConfig.servers.map((item) => {
      this.postsService.processGroups(`2`, start, pass, false, item.ip, item.port)
      start += 2000
      pass += 2000
    })
  }
  }


Если пройдем в функцию processGroups, то тут будет запрос в стороннее приложение (добавил блок proxy )

async checkIsClosedGroup(code, ip, port) {
    const access = process.env['****'];
    const version = process.env['****];

    try {
      const { data } = await firstValueFrom(
        this.httpService
          .get<any>(
            `https://********/*******/*******?code=${encodeURIComponent(code)}&access_token=${access}&v=${version}`,
              я добавил этот блок но видимо не так надо делать
              {
                proxy: {
                  host: ip,
                  port: port, 
                  protocol: 'https'
                }
              }
          )
          .pipe(
            catchError((error: AxiosError) => {
              if (error.response &&
                'data' in error.response &&
                error.response.data != undefined) {
                this.logsServicePostsAdd.error(******* );
              }
              this.logsServicePostsAdd.error(****** );
              throw new Error(
                `checkIsClosedGroup An error happened! ${data} для ${code}`,
              );
            }),
          ),
      );
      if (!data || !data.response || typeof data.response !== 'object') {
        this.logsServicePostsAdd.error(***** );
      }

      return data;
    } catch (err) {
      await this.logsServicePostsAdd.error(****);
    }
  }


Но ничего выходит, получаю {"level":"error","message":"checkIsClosedGroup error","trace":"ошибка получения постов в группе undefined код \n.... Как правильно настроить проксирование запросов исхолящих с разных ip, кто может подсказать.
Без объекта proxe соответственно все работает
  • Вопрос задан
  • 201 просмотр
Решения вопроса 1
karabanov
@karabanov
Системный администратор
На сетевой интерфейс добавь несколько IP.
Все эти IP добавь в качестве А записей к домену на который будет приходить запрос.

В location добавь что-то типо:
location /foobar/ {
        proxy_pass https://buz.org/
        proxy_bind $server_addr;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_connect_timeout 3s;
        proxy_read_timeout 120s;
        proxy_send_timeout 10s;
        proxy_buffering on;
        proxy_max_temp_file_size 0;
        proxy_cache off;
        proxy_ssl_server_name on;
    }

Запросы приходящие в эндпоинт /foobar/ будут проксироваться к https://buz.org/ и соединения будут открываться с разных IP.

Прочитай про upstream, proxy_bind и $server_addr чтобы понять, что тут происходит.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы