Pull to refresh

Как настроить прокси сервер на базе squid-proxy для LLM-провайдеров и не только. Самый простой гайд для чайников

Level of difficultyEasy
Reading time3 min
Views3.7K
Использование прокси-сервера
Использование прокси-сервера

Салют! Меня зовут Григорий, и я главный по спецпроектам в команде AllSee.

Если LLM‑провайдер блокирует ваши запросы из России, то решить данную проблему поможет прокси‑сервер. В данном гайде я рассказываю, как быстро настроить squid‑proxy на вашей удалённой машине.

Сразу к гайду

Зачем это нужно на примере openai-python

Если мы попробуем вызвать модель OpenAI, то получим ошибку:

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"), 
)
  
chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Привет!",
        }
    ],
    model="gpt-4o",
)

print(chat_completion.choices[0].message.content)

# -> openai.PermissionDeniedError: Error code: 403 - {'error': {'code': 'unsupported_country_region_territory', 'message': 'Country, region, or territory not supported', 'param': None, 'type': 'request_forbidden'}}

Чтобы избавиться от данной ошибки, нужно отправлять запросы из «supported_country_region_territory». Для этого достаточно передать в конструктор класса OpenAI http‑клиент с настроенным адресом прокси‑сервера:

import os
import httpx
from openai import OpenAI

client = OpenAI(
    api_key=os.environ.get("OPENAI_API_KEY"),
    http_client=httpx.Client(proxy=os.environ.get("PROXY_URL"))
)

chat_completion = client.chat.completions.create(
    messages=[
        {
            "role": "user",
            "content": "Привет!",
        }
    ],
    model="gpt-4o",
)

print(chat_completion.choices[0].message.content)

# -> "Привет! Как могу помочь вам сегодня?"

Где взять адрес прокси‑сервера? Об этом далее.

Гайд по настроке squid-proxy

Предварительная подготовка

1. Сервер

Для настройки прокси‑сервера нам потребуется сервер, арендованный за рубежом. В моём случае, это сервер в Нидерландах с OS Ubuntu 20.04 LTS. Инструкция будет наиболее актуальна именно для Ubuntu, однако для других OS отличия будут минимальны (скорее всего, только пакетный менеджер).

2. Публичный IP-адрес вашего клиента

Чтобы разрешить запросы только с нужного нам клиента — узнаём его публичный IP. IP сервера можно посмотреть в панели управления провайдера, а IP вашей локальной машины можно посмотреть, к примеру, тут.

Настройка squid-proxy

  1. Подключаемся к нашему удалённому серверу по ssh

    ssh -i path/to/your/private/ssh/key user@your_server_ip

  2. Обновляем пакеты

    sudo apt update
    sudo apt upgrade

  3. Установливаем Squid

    sudo apt-get -y install squid

  4. Преднастраиваем сеть (опционально)

    sudo ufw allow squid
    sudo iptables -P INPUT ACCEPT

  5. Активируем сервис squid

    sudo systemctl enable squid
    sudo systemctl start squid

  6. Настраиваем squid

    1. Создаём бекап конфигурации squid и удаляем из оригинального файла всё 8000 строк комментариев

      sudo cp /etc/squid/squid.conf /etc/squid/squid_back.conf
      sudo  grep -v '^ *#\|^ *$' /etc/squid/squid_back.conf > /etc/squid/squid.conf

    2. Открываем файл конфигурации squid

      sudo apt-get -y install nano
      sudo nano /etc/squid/squid.conf

    3. Файл squid.conf необходимо изменить следующим образом

      ...
      http_access allow localhost
      acl whitelist src 111.111.111.111   # Добавляем IP адрес нашего основного сервера (нужно указать реальный IP) в список доступа
      http_access allow whitelist         # Разрешаем основному серверу использовать наш прокси
      http_access deny all
      ...

  7. Перезапускаем cервис squid

    sudo systemctl restart squid

Получаем адрес прокси-сервера

  1. Запрашиваем публичный IP сервера

    curl https://ipinfo.io/ip

  2. Итоговый адрес прокси‑сервера (с портом 3128 по умолчанию): http://proxy_server_ip:3128

Заключение

Теперь у вас есть рабочий прокси‑сервер, который позволит обойти географические ограничения и использовать нужные вам инструменты из «unsupported_country_region_territory».

Буду рад обсудить гайд в комментариях. Удачи и будем на связи✌️

Tags:
Hubs:
Total votes 5: ↑4 and ↓1+4
Comments4

Articles