Proxy in Chrome: Where the Setting Lives, How to Set One Per Profile, and Every Error Code
Chrome borrows its proxy from the operating system, which is why it has no proxy screen and no per-profile setting. The four ways around that, tested on Chrome 154, with the error codes each mistake produces.

Chrome has no proxy settings of its own. On Windows, macOS and Linux it uses whatever the operating system is set to, and the only proxy control in Chrome's settings is a button that opens the operating system's dialog. That one design decision explains most of the questions people have: why there is no proxy screen, why two Chrome profiles cannot have two proxies, and why a username in the launch flag does nothing.
There are four ways to give Chrome a proxy anyway. We tested each on Chrome 154 on 30 September 2026, against a proxy that logs what it receives, so the error codes below are the real ones.
The quick version
| You want | Do this |
|---|---|
| All of Chrome through one proxy | Set the operating system proxy. Chrome follows it |
| One Chrome profile through a proxy | A proxy extension, installed in that profile only |
| Different proxies for different windows | Separate Chrome instances, each started with --user-data-dir and --proxy-server |
| Proxy only for certain sites | A PAC file, or a proxy extension's rules |
| Chrome on Android or iPhone | The phone's Wi-Fi proxy setting. Chrome has none |
Method 1: the operating system setting
In Chrome, open Settings, then System, and click "Open your computer's proxy settings". That is the whole of Chrome's built-in support. What opens depends on the system:
- Windows. Settings, Network and internet, Proxy. Under "Manual proxy setup" enter the address and port. This screen takes an HTTP proxy only, and it has no field for a username: Chrome asks for the login when the proxy requests it.
- macOS. System Settings, Network, your connection, Details, Proxies. It has separate rows for Web proxy (HTTP), Secure web proxy (HTTPS) and SOCKS proxy, each with username and password fields. Tick both HTTP and HTTPS and fill in the same server, or almost no site will go through.
- Linux. GNOME and KDE have a Network proxy setting; without a desktop environment Chrome reads the
http_proxyandhttps_proxyenvironment variables.
This routes every Chrome window, every profile, and most other programs on the machine through the same proxy. For one proxy and one person that is fine. It is the wrong tool for anything per profile.
Method 2: command-line flags
Start Chrome with --proxy-server and it ignores the system setting for that instance:
# macOS
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --proxy-server="http://proxy.sotaproxy.com:10000"
# Windows
"C:\Program Files\Google\Chrome\Application\chrome.exe" --proxy-server="http://proxy.sotaproxy.com:10000"
The flag accepts http://, https://, socks5:// and socks4:// addresses. Three more flags matter:
| Flag | What it does |
|---|---|
--proxy-bypass-list="example.com;*.internal.net" | These hosts go direct. In our test the listed host reached the site without touching the proxy |
--proxy-pac-url=file:///path/to/proxy.pac | Use a PAC file for per-site rules |
--user-data-dir=/path/to/profile | Use a separate profile folder, so this instance has its own cookies and its own proxy |
The last flag is how you get different proxies for different accounts without an extension: one Chrome instance per profile folder, each with its own --proxy-server. It is also what automation frameworks and antidetect browsers do underneath.
The flag does not take a username and password. In our test, Chrome started with --proxy-server="http://user:password@host:port" refused the proxy entirely and every page failed with net::ERR_NO_SUPPORTED_PROXIES. Give the address only, and either answer Chrome's login prompt or supply the credentials another way: an extension, or in automation the framework's own fields.
Method 3: an extension
Extensions can control Chrome's proxy through the chrome.proxy API, and an extension's settings belong to the profile it is installed in. That is the built-in answer to "one proxy per profile": install FoxyProxy or a similar extension in a profile, configure the proxy there, and only that profile uses it. Extensions also store the username and password and answer the proxy's login challenge for you, and they can route only certain sites by pattern.
Two limits. An extension can only proxy traffic Chrome sends after it starts, so nothing outside Chrome is covered. And if an extension controls the proxy, the system setting is ignored for that profile, which confuses people who set both.
Method 4: a PAC file
A PAC file is a small JavaScript function that Chrome calls for every request:
function FindProxyForURL(url, host) {
if (dnsDomainIs(host, ".example.com")) {
return "PROXY proxy.sotaproxy.com:10000";
}
return "DIRECT";
}
Point Chrome at it with --proxy-pac-url, or through the system setting's "automatic configuration" field. In our test a PAC file returning our proxy sent the request through it correctly. A PAC file cannot carry a password, so for an authenticated proxy Chrome will still ask.
Chrome on Android and iPhone
Chrome for Android has no proxy setting. The Wi-Fi network's proxy in Android settings applies to Chrome, but it accepts an HTTP proxy only and has no fields for a login, and it covers that one Wi-Fi network and not mobile data. Chrome on iPhone uses the system network stack, so the proxy is set under the Wi-Fi network's "Configure Proxy", which does have authentication fields. There is no extension route on either phone.
What Chrome does with DNS and WebRTC
Where the hostname is resolved depends on the proxy type. We measured this against a logging proxy: with an HTTP proxy Chrome sends the hostname inside the CONNECT request, with socks5:// it sends the hostname to the proxy, and with socks4:// it resolves the name locally and sends an address. If you use SOCKS, use SOCKS5. The full comparison across tools is in what is a DNS proxy.
WebRTC can expose your real address around any proxy. Chrome has no setting page for it. The options are Google's own "WebRTC Network Limiter" extension, or the WebRtcIPHandling policy set to disable_non_proxied_udp on a managed machine. Check the result on our IP checker.
Every error we hit
| Chrome shows | What it means |
|---|---|
ERR_PROXY_CONNECTION_FAILED | Chrome could not connect to the proxy at all: wrong port, or the proxy is down. We got it for both http:// and socks5:// addresses on a closed port |
ERR_INVALID_AUTH_CREDENTIALS | The proxy asked for a login and Chrome had none to send |
ERR_HTTP_RESPONSE_CODE_FAILURE | In automation, the credentials were sent and refused |
ERR_NO_SUPPORTED_PROXIES | The proxy address was rejected, in our case because it contained a username and password |
| "Your proxy settings are managed by your organization" | A policy controls them. See chrome://policy |
The first is the one people meet most, and the fix is boring: check the port, and check the proxy is up with curl -x http://host:port https://api.ipify.org before blaming Chrome.
Automation: Playwright, Puppeteer, Selenium
Because the flag refuses credentials, every framework has its own way to pass them:
# Playwright: separate fields; this is what we tested
browser = p.chromium.launch(proxy={
"server": "http://proxy.sotaproxy.com:10000",
"username": "login_c_US",
"password": "password",
})
# Puppeteer: address in the flag, credentials per page
args: ["--proxy-server=http://proxy.sotaproxy.com:10000"]
await page.authenticate({ username: "login_c_US", password: "password" });
Selenium has no field for proxy credentials at all. The ways around it are in authentication and IP whitelisting.
What to type for our proxies
| Product | Address for Chrome |
|---|---|
| Residential | http://proxy.sotaproxy.com:10000, with the country and session in the username |
| ISP, datacenter, IPv6 | http://your-address:50100, or socks5://your-address:50101 |
The username suffixes for country, city and sticky sessions are in the connection string reference.
FAQ
Where are proxy settings in Chrome?
Chrome has none of its own. Settings, System, "Open your computer's proxy settings" opens the operating system's dialog, and Chrome uses whatever is set there.
Can I set a proxy for one Chrome profile only?
Not in Chrome's settings. Install a proxy extension in that profile, or start a separate Chrome instance for it with --user-data-dir and --proxy-server.
Does Chrome support SOCKS5?
Yes, through --proxy-server="socks5://host:port", through an extension, and through the macOS system setting. Windows' main proxy screen takes an HTTP proxy only.
Why does Chrome ignore the username in --proxy-server?
The flag does not accept credentials. In our test Chrome refused the proxy with ERR_NO_SUPPORTED_PROXIES. Give the address only and supply the login through the prompt, an extension, or your automation framework's fields.
How do I turn the proxy off in Chrome?
Wherever you turned it on: remove it from the operating system setting, remove the flag from the shortcut, or disable the extension. If the setting is greyed out, a policy controls it.
Related articles

Proxy Authentication Explained: Username and Password vs IP Whitelist
Two ways a proxy knows it is you: credentials sent on every connection, or a list of addresses allowed in without them. What each one puts on the wire, measured on a test proxy, which tools cannot do which, and why a whitelisted laptop breaks a week later.

Banned With a Clean Proxy? The Setup Mistakes That Actually Do It
The proxy was clean, the address was residential, and the account still died. In most cases we see, the address was never the problem. Seven setup faults, each one checkable in a minute, in the order they usually turn out to be the cause.

ERR_TUNNEL_CONNECTION_FAILED: The Error Name Is the Diagnosis
Chrome asked a proxy to open a CONNECT tunnel and it failed. That is the whole error. Where the proxy comes from when you never configured one, the six ways a proxy you did configure produces it, and why clearing your cache fixes nothing.

wget With a Proxy: Every Way to Set It, What Overrides What, and the SOCKS5 Problem
Four ways to give wget a proxy and the order they override each other in, tested on wget 1.25. Plus the exact error messages, the special-character trap, bypassing a proxy, and the one thing wget cannot do: SOCKS5.

FoxyProxy Setup in 2026: Chrome, Firefox, Patterns, and the SOCKS5 Login Chrome Ignores
FoxyProxy is the same extension on Chrome and Firefox and does different things on each. The setup step by step for version 9, the pattern syntax that actually matches, and the one limit most guides leave out: in Chrome a SOCKS5 proxy with a login cannot work, which we confirmed by capturing what Chrome sends.

How to Avoid CAPTCHA on Automated Workflows
Learn how to avoid CAPTCHA on automated workflows with proxy tactics, antidetect browsers, request pacing, and solver fallbacks built for real operators.