Как включить прокси только для некоторых сайтов в Chrome
Содержание

Коротко: В настольном Chrome нет настройки, которая включает прокси для отдельных сайтов. Браузер работает с одной конфигурацией прокси на весь трафик, и берёт её из операционной системы, флага запуска, политики администратора или расширения. Чтобы через прокси шли только некоторые сайты, Chrome нужен PAC-скрипт: короткая функция, которая выбирает прокси для каждого запроса. Её пишут вручную, или расширение собирает её из правил.
Чтобы в Chrome через прокси шли только определённые сайты, браузеру дают PAC-скрипт со списком этих сайтов, и Chrome сверяется с ним при каждом запросе. Взять скрипт браузер может из трёх мест: из операционной системы, из отдельно запущенного Chrome или из расширения.
Есть ли в Chrome настройка прокси для отдельного сайта?
Нет. На странице настроек Chrome есть единственный пункт про прокси, «Open your computer’s proxy settings» (открыть настройки прокси компьютера), и Chromium описывает эти настройки как действующие на весь компьютер (строки настроек Chromium).
Заметки Chromium о прокси называют четыре источника, из которых Chrome может взять конфигурацию прокси: политику администратора, флаги командной строки, расширение и операционную систему. Тот, что действует, задаёт одну конфигурацию на всё, что загружает браузер, а решение для отдельного сайта живёт внутри этой конфигурации в виде PAC-скрипта.
Что делает PAC-скрипт?
PAC-скрипт (proxy auto-configuration, автоматическая настройка прокси) это
функция на JavaScript с именем FindProxyForURL. Chrome вызывает её для
каждого запроса, передавая адрес и имя хоста, и использует строку, которую она
возвращает: DIRECT, если прокси не нужен, или PROXY host:port для
прокси-сервера. Так это описано в
справочнике MDN по PAC.
Этот скрипт отправляет один домен и его поддомены через прокси, а всё остальное напрямую. Адрес прокси взят из диапазона, зарезервированного для документации (RFC 5737); подставьте вместо него свой.
function FindProxyForURL(url, host) {
if (host === "example.com" || dnsDomainIs(host, ".example.com")) {
return "PROXY 203.0.113.10:8080";
}
return "DIRECT";
}
Добавьте по одному условию на каждый сайт, который должен идти через прокси.
Последний return решает, что будет со всеми сайтами, которых нет в списке.
Какими способами можно передать Chrome PAC-скрипт?
Тремя: через системные настройки прокси, через отдельно запущенный Chrome или через расширение. Они различаются тем, какую часть компьютера затрагивают и как вступает в силу изменение.
Через системные настройки прокси
В Windows в настройках прокси есть пункт «setup script» (сценарий настройки), куда вписывают адрес скрипта, как показано в руководстве Microsoft, и Chrome следует системной настройке. Скрипт должен быть доступен по URL. Его будут использовать и все остальные приложения, которые читают системные настройки прокси, поэтому этот способ подходит для скрипта, рассчитанного на весь компьютер.
В отдельном экземпляре Chrome
Chrome принимает флаги прокси при запуске, они перечислены на
странице сетевых настроек Chromium:
--proxy-server задаёт один прокси, --proxy-bypass-list перечисляет хосты,
которые его обходят, а --proxy-pac-url указывает на скрипт. Если запустить
второй Chrome со своим --user-data-dir, он работает рядом с вашим обычным,
потому что два запущенных экземпляра не могут делить один каталог данных
(заметки Chromium о каталоге пользовательских данных).
google-chrome --user-data-dir="$HOME/chrome-proxied" --proxy-server="http://203.0.113.10:8080"
Такой экземпляр пускает весь свой трафик через прокси, поэтому маршрут сайта определяется тем, в каком окне вы его открыли. Чтобы сменить прокси, экземпляр придётся закрыть и запустить снова с новыми флагами.
С помощью прокси-расширения
Расширение задаёт прокси Chrome для профиля, в который оно установлено, через API chrome.proxy, а переключатель с правилами собирает их в PAC-скрипт. Так работает наше бесплатное расширение ProxyJam Connector, в Chrome и в Microsoft Edge:
- Добавьте профиль с хостом, портом и протоколом прокси.
- Добавьте правило, например «Domain + subdomains» (домен и поддомены) с
example.com, которое указывает на этот профиль. Срабатывает первое правило, подходящее под сайт. - Оставьте запасной вариант на Direct, чтобы сайты, не подходящие ни под одно правило, подключались без прокси.
- Выберите Auto во всплывающем окне на панели инструментов.
Для сайта, подошедшего под правило, скрипт Connector называет только этот прокси, без прямого подключения в качестве запасного. Если прокси не работает, сайт не загрузится, и ваш собственный адрес для него не будет использован.
Может ли каждая вкладка работать через свой прокси?
В Chrome нет. API chrome.proxy хранит одно значение на профиль и не принимает вкладку в качестве параметра, так что у вкладки нет собственной настройки.
Рабочая единица здесь профиль или экземпляр. Создайте второй профиль Chrome для работы через прокси и установите расширение туда, или запустите второй экземпляр со своими флагами, и держите два окна рядом. Тогда у каждого окна будет свой прокси.
Почему правило с путём не срабатывает на HTTPS-сайтах?
От адреса https:// Chrome передаёт PAC-скрипту только схему, хост и порт.
Путь, параметры запроса и фрагмент отрезаются начиная с Chrome 52, а настройку,
которая это отключала, убрали в Chrome 75
(заметки Chromium о прокси).
Поэтому правило вроде example.com/shop/* не совпадёт ни с одной
HTTPS-страницей. Пишите правила по имени хоста, а если разделу сайта нужен
собственный маршрут, выделите ему отдельный поддомен. Обычные адреса http://
по-прежнему попадают в скрипт вместе с путём, хотя Chromium не советует на это
полагаться. Connector показывает предупреждение рядом с любым правилом, которое
зависит от пути.
Какой способ выбрать?
Для нескольких сайтов и одного прокси меньше всего работы с расширением, а на странице расширения перечислено, что Connector умеет и чего не умеет в Chrome. Прокси, который просит пароль, разобран в статье почему Chrome постоянно спрашивает логин и пароль прокси, а перенос правил из старого переключателя в статье что изменилось с Manifest V3.
Если прокси, через который идут эти сайты, должен сохранять один адрес, зарегистрированный на интернет-провайдера, это и есть ISP-прокси. ProxyJam продаёт статические резидентные (ISP) прокси на странице ISP-прокси, цены на странице цен.
