# 如何在 Chrome 中只让特定网站走代理 | ProxyJam

Chrome 对所有网站只有一项代理设置。要只让特定网站走代理，就要给它一个 PAC 脚本：通过系统、在启动时，或通过扩展程序。

- Canonical: https://proxyjam.com/zh/blog/chrome-proxy-for-specific-sites/
- Updated: 2026-10-08
- Language: zh

桌面版 Chrome 没有把代理只应用于特定网站的设置。它对所有浏览只运行一套代理配置，这套配置来自操作系统、启动参数、管理员策略或扩展程序。要只让部分网站走代理，Chrome 需要一个 PAC 脚本：一个为每次请求选择代理的简短函数，可以由您自己编写，也可以由扩展程序根据规则生成。


## 确认网站走的是哪条路由

1. **把一个检查页面临时加入列表** 把 proxyjam.com 加入脚本或规则中要走代理的网站，与您关心的网站放在一起。
2. **打开检查页面** [“我的 IP 是什么”](/what-is-my-ip/)（英文）会显示访问它的地址，以及该地址所属的互联网服务商和网络（ASN）。两者都应当是代理的信息。
3. **从列表中移除它并刷新** 页面现在应当显示您自己的连接。如果两次结果都符合预期，列表中的网站就会走代理，其余网站直连。

## 路由规则从哪里来，每种方法影响什么

|  | 系统代理设置 | 单独的 Chrome 实例 | 代理扩展程序 |
|---|---|---|---|
| 影响范围 | 电脑上所有读取系统设置的应用程序 | 只有该实例的窗口 | 安装了该扩展程序的 Chrome 配置文件 |
| 如何选择网站 | 由托管在某个网址上的 PAC 脚本决定 | 由您在哪个窗口中打开网站决定 | 由扩展程序转换成 PAC 脚本的规则决定 |
| 修改配置 | 编辑托管的脚本 | 退出后用新的参数重新启动 | 在扩展程序中编辑一条规则 |
| 需要密码的代理 | Chrome 在对话框中询问 | Chrome 在对话框中询问 | 对于 HTTP 和 HTTPS 代理，扩展程序可以代为应答 |

作用范围取自 Chromium 关于代理设置读取位置的文档以及各启动参数自身的说明；其余内容根据每种方法的设置方式得出。我们没有做过速度或可靠性测量。无论由哪个 PAC 脚本决定路由，Chrome 传给它的 HTTPS 地址都只包含协议、主机和端口。


## 快速解答

### Chrome 的绕过列表能做到同样的事吗？

它的作用正好相反。--proxy-bypass-list 参数列出的是不走代理的主机，而且只有与 --proxy-server 一起使用才生效，所以不在列表中的一切都会走代理。要只让一小部分网站走代理、其余直连，请使用 PAC 脚本。

### 无痕窗口使用同一个代理吗？

默认是的。Chrome 代理 API 的文档说明，无痕窗口会继承普通窗口的设置，扩展程序在需要时也可以为无痕模式单独设置一个值。

### 为什么 Chrome 提示它正在使用某个扩展程序的代理设置？

是某个扩展程序设置了代理，而 Chrome 允许扩展程序或管理员策略取代系统设置来决定代理。停用该扩展程序，或把它切换为直连，即可交回控制权。

### 不匹配任何规则的网站会怎样？

它们得到的是脚本最后返回的结果。在示例脚本中那是 DIRECT，所以不匹配的网站会不经代理直接连接。ProxyJam Connector 把这称为回退（fallback），在您另行选择之前，它被设为 Direct（直连）。


## 参考来源

- [Chromium: proxy support notes (proxy.md)](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)，Chrome 从哪里读取代理设置，以及自 Chrome 52 起 PAC 脚本收到的 HTTPS 地址不含路径和查询参数
- [Chromium: settings strings](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/app/settings_strings.grdp)，“打开您计算机的代理设置”这一项，其说明是打开适用于整台电脑的设置
- [Chromium: network settings](https://www.chromium.org/developers/design-documents/network-settings/)，`--proxy-server`、`--proxy-bypass-list` 和 `--proxy-pac-url` 参数
- [Chromium: user data directory](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/user_data_dir.md)，`--user-data-dir` 参数，以及两个正在运行的实例不能共用一个目录
- [Chrome for Developers: chrome.proxy API](https://developer.chrome.com/docs/extensions/reference/api/proxy)，扩展程序可以设置的代理模式，以及无痕窗口继承普通窗口的设置
- [Chrome for Developers: chrome.types API](https://developer.chrome.com/docs/extensions/reference/api/types)，设置可以存储的作用范围，包括仅限无痕模式的范围
- [MDN: Proxy Auto-Configuration (PAC) file](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file)，FindProxyForURL 函数、它的返回值以及 dnsDomainIs
- [Microsoft Support: Use a proxy server in Windows](https://support.microsoft.com/en-us/windows/experience/connectivity-networking/use-a-proxy-server-in-windows)，让 Windows 使用代理设置脚本
- [RFC 5737: IPv4 Address Blocks Reserved for Documentation](https://www.rfc-editor.org/rfc/rfc5737.html)，示例代理地址所用的 203.0.113.0/24 地址段




要在 Chrome 中只让特定网站走代理，就要给浏览器一个列出这些网站的 PAC 脚本，Chrome 会在每次请求时参照它。脚本可以来自三个地方：您的操作系统、一个单独启动的 Chrome，或者一个扩展程序。

## Chrome 有按网站设置代理的选项吗？

没有。Chrome 的设置页面只有一个代理入口，标为“打开您计算机的代理设置”，而 Chromium 把这些设置描述为适用于整台电脑（[Chromium 的设置字符串](https://chromium.googlesource.com/chromium/src/+/HEAD/chrome/app/settings_strings.grdp)）。

[Chromium 的代理说明](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)列出了 Chrome 可以获取代理配置的四个来源：管理员策略、命令行参数、扩展程序和操作系统。无论哪一个生效，它都为浏览器加载的一切提供同一套配置，而按网站做出的决定，以 PAC 脚本的形式存在于这套配置之中。

## PAC 脚本是做什么的？

PAC（代理自动配置）脚本是一个名为 `FindProxyForURL` 的 JavaScript 函数。Chrome 在每次请求时用地址和主机名调用它，并使用它返回的字符串：`DIRECT` 表示不使用代理，`PROXY host:port` 表示使用某个代理服务器，详见 [MDN 的 PAC 参考](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Proxy_servers_and_tunneling/Proxy_Auto-Configuration_PAC_file)。

下面这个脚本让一个域名及其子域名走代理，其余一切直连。代理地址取自专供文档使用的地址段（[RFC 5737](https://www.rfc-editor.org/rfc/rfc5737.html)），请换成您自己的地址。

```javascript
function FindProxyForURL(url, host) {
  if (host === "example.com" || dnsDomainIs(host, ".example.com")) {
    return "PROXY 203.0.113.10:8080";
  }
  return "DIRECT";
}
```

每个要走代理的网站各加一个条件。最后的 `return` 决定所有未列出的网站如何处理。

## 有哪些方法可以把 PAC 脚本交给 Chrome？

有三种：通过系统代理设置、通过一个单独启动的 Chrome，或者通过扩展程序。它们的区别在于会影响电脑上的多大范围，以及修改如何生效。

### 通过系统代理设置

在 Windows 上，代理设置中有一个“设置脚本”选项，可以填入脚本的地址，见 [Microsoft 的指南](https://support.microsoft.com/en-us/windows/experience/connectivity-networking/use-a-proxy-server-in-windows)，而 Chrome 会遵循系统设置。脚本必须能通过一个网址访问到。所有读取系统代理设置的应用程序也都会使用它，所以这种方法适合打算让整台电脑使用的脚本。

### 在单独的 Chrome 实例中

Chrome 在启动时接受代理参数，这些参数列在 [Chromium 的网络设置页面](https://www.chromium.org/developers/design-documents/network-settings/)上：`--proxy-server` 指定一个代理，`--proxy-bypass-list` 列出不走代理的主机，`--proxy-pac-url` 指向一个脚本。使用自己的 `--user-data-dir` 启动后，第二个 Chrome 会与您平时用的那个并行运行，因为两个正在运行的实例不能共用一个数据目录（[Chromium 关于用户数据目录的说明](https://chromium.googlesource.com/chromium/src/+/HEAD/docs/user_data_dir.md)）。

```sh
google-chrome --user-data-dir="$HOME/chrome-proxied" --proxy-server="http://203.0.113.10:8080"
```

这个实例的所有流量都走代理，所以您在哪个窗口中打开网站，就决定了它走哪条路由。要更换代理，就得退出这个实例，再用新的参数重新启动。

### 使用代理扩展程序

扩展程序通过 [chrome.proxy API](https://developer.chrome.com/docs/extensions/reference/api/proxy) 为其所在的配置文件设置 Chrome 的代理，而带规则的切换器会把规则编译成 PAC 脚本。我们免费的 [ProxyJam Connector](/zh/browser-extension/) 就是这样工作的，在 Chrome 和 Microsoft Edge 中都可以使用：

1. 添加一个配置，填入代理的主机、端口和协议。
2. 添加一条规则，例如对 `example.com` 使用“Domain + subdomains”（域名及子域名），并指向这个配置。第一条匹配网站的规则生效。
3. 把回退（fallback）保持为 Direct（直连），这样不匹配任何规则的网站会不经代理直接连接。
4. 在工具栏弹出窗口中选择 Auto（自动）。

对于匹配的网站，Connector 的脚本只指定这一个代理，后面不附带直连选项。如果代理不可用，该网站就无法加载，而您自己的地址永远不会被用来访问它。

## 每个标签页能使用不同的代理吗？

在 Chrome 中不能。[chrome.proxy API](https://developer.chrome.com/docs/extensions/reference/api/proxy) 为一个配置文件只存储一个值，也不接受标签页作为参数，所以标签页没有可以单独设置的东西。

可行的单位是配置文件或实例。为需要走代理的工作新建第二个 Chrome 配置文件并在其中安装扩展程序，或者用单独的参数启动第二个实例，然后把两个窗口并排放置。这样每个窗口就各自带着自己的代理。

## 为什么带路径的规则在 HTTPS 网站上失效？

对于 `https://` 地址，Chrome 只把协议、主机和端口交给 PAC 脚本。自 Chrome 52 起，路径、查询参数和片段都会被去掉，而关闭这一行为的选项已在 Chrome 75 中移除（[Chromium 的代理说明](https://chromium.googlesource.com/chromium/src/+/HEAD/net/docs/proxy.md)）。

因此，像 `example.com/shop/*` 这样的规则不会匹配任何 HTTPS 页面。请按主机名编写规则；如果网站的某个部分需要单独的路由，就给它一个独立的子域名。普通的 `http://` 地址仍会连同路径一起传给脚本，但 Chromium 建议不要依赖这一点。Connector 会在任何依赖路径的规则旁边显示警告。

## 应该选择哪种方法？

如果只有几个网站和一个代理，扩展程序最省事，[扩展程序页面](/zh/browser-extension/)列出了 Connector 在 Chrome 上能做和不能做的事。需要密码的代理见[为什么 Chrome 一再要求输入代理用户名和密码](/zh/blog/chrome-proxy-password-prompt/)，从旧的切换器迁移规则见 [Manifest V3 带来了哪些变化](/zh/blog/switchyomega-manifest-v3/)。如何为每个国家设置一个配置文件和代理，以查看您自己的网站在各个市场的样子，见[从另一个国家查看您的网站](/zh/blog/view-website-from-another-country/)。

如果您希望让这些网站所走的代理保持一个注册在互联网服务商名下的地址，那就是 [ISP 代理](/zh/blog/what-are-isp-proxies/)。ProxyJam 在 [ISP 代理页面](/zh/isp-proxies/)上销售静态住宅（ISP）代理，价格见[价格页面](/zh/pricing/)。

