All locations active · 99.99% uptime
DevOps Platform · Code and CI

GitLab Proxy: Shared Access, API Limits and the Object Storage Path

On GitLab, the proxy decision concerns not only the browser but also runners and artefact downloads. Within the same job there is team access, rate limiting and download traffic that lands on another host. This page covers all three in turn.

What does it cover?

01
Two deployment formsThe different requirements of a cloud instance and a self-hosted installation.
02
Shared accessDividing team and external agency access by exit.
03
Rate limitingHow counters are kept on public endpoints, and wait directives.
04
Artefact pathDownloads being redirected to object storage, and the second connection.

You can use GitLab in two different ways: on the cloud instance the provider operates, or on a copy you install on your own server. This distinction changes the proxy decision from the outset, because in the second case the target address is under your control and some of the traffic never leaves for the external network.

The second distinction is on the client side. The browser, the git client, the continuous integration runner and scripts read different configurations. Runners usually look at environment variables; this makes it critical to write correctly the list that determines which addresses are kept out of scope.

The third is download behaviour: in most setups, artefacts and large file content are served not from the main application but from an object store. The sections below unpack these three topics separately.

A cloud instance and a self-hosted installation do not require the same thing

On the instance the provider operates, the target address is on the external network and all of your clients talk by going out to the internet. Here the proxy's function is to control the exit, to speak from a fixed address on the corporate network, or to verify a regional view. Writing rules is relatively simple because the target is a single domain family.

With a self-hosted installation the picture is reversed. If the application runs on the internal network, routing traffic to it through the proxy is usually unnecessary and even harmful: directing internal addresses to an external exit can break the connection entirely. That is why the list of addresses to exclude is as important as the proxy address itself.

Mixed scenarios are also common: the application may be on the internal network while container images and package dependencies are pulled from outside. In such a setup the rule is built like this: internal addresses direct, external addresses through the proxy.

Another difference is on the redundancy side. On a cloud instance, availability is the provider's responsibility; with a self-hosted installation the proxy creates a new single point of failure between client and application. Before adding this layer, list in writing which jobs will stop if the proxy goes down, and define at least a fallback path for the deployment pipeline.

Whichever setup you have, the first step is to write the target list. The application itself, the package registry, the container registry and the object store may be at separate addresses; note them all down one by one. The difference between forward and reverse proxies is a good starting point for clarifying which direction you are working in.

Settling team access into a single exit scheme

Not everyone who accesses a repository connects from the same place: in-house developers may come from the office network, remote workers from a home connection, and external agencies from an entirely different country. In setups where access is restricted to specific addresses, this scatter turns directly into an access problem.

Defining a common exit simplifies this picture: wherever anyone connects from, they reach the application from a single recognised address. But a single exit should not mean a single set of credentials. Defining separate credentials per group means that when someone leaves you only have to renew the relevant record.

Think of the life cycle in three steps: during definition, scope and permissions are set; during use, git, interface and runner traffic all pass through the same scheme; during renewal, both credentials and tokens are refreshed. Tying this cycle to a calendar prevents forgotten access from piling up.

When dividing access, review permission depth as well. Which projects the credentials tied to an exit cover is often set during setup and never revisited; a scope kept broader than necessary turns a small leak into a wide surface.

Setting aside a separate exit when working with external teams brings an added advantage: when the contract ends you shut down only that exit, and the internal team is unaffected. Choose the authentication method according to the team structure; for offices with fixed addresses, IP authorisation is practical.

DIAGRAMThe three-stage cycle of team access
The three-stage cycle of team accessA three-stage cycle diagram: definition, use and renewal; the shared team exit at the centre.CYCLEDefinitionscope and permissionsUsagegit, interface, CIRotationtoken and passwordteam exit

Thinking of access as a recurring cycle rather than a one-off setup prevents forgotten permissions from piling up. At the centre sits a single recognised exit.

The scope of the git client, the runner and environment variables

The git client on the command line reads its own configuration; a setting you write in the browser does not affect it. The continuous integration runner runs on another machine and in most setups looks at environment variables. Three different components working on the same repository mean three separate scopes.

On the runner side, the critical point is the list of addresses to be excluded. If this list is incomplete, a request to a service on the internal network is routed to the external exit and never arrives; if it is too broad, some external traffic bypasses the proxy and an audit gap appears. When writing the list, consider host names and any internal network blocks together.

The second point is the sub-processes launched inside a job. If a script pulls a container image, a package manager downloads dependencies, or a test tool sends requests outside, each of these is a separate client. Defining the variables at job level is enough in most cases, but some tools expect their own configuration.

Be careful when committing configuration to the repository as well. Scope lists are usually harmless, but an address line containing credentials stays in the history once committed and goes to everyone who takes a copy of the repository. Keeping these values in protected variables and masking them in job logs should be standard practice.

After finishing the configuration, add a small check to the job's first step that prints the exit address. A step like this catches coverage that quietly breaks months later. If you want to review the protocol choice, the protocol selection guide compares the two transports.

Artefact and large file downloads land on another host

When you want to download an artefact produced by a job or a large file object, the request first goes to the application, but the response is usually not the file itself. The application generates a temporary, signed address for the object store where the content sits and redirects the client there. The client then opens a second connection to this new host.

From the proxy's point of view this has two consequences. First, if your rule only covers the application domain, the actual download traffic falls outside the scope and goes directly. Second, on a network where access is restricted to specific addresses, the download fails if the target of the second connection is not on the allow list.

The same behaviour is seen in container registries: the manifest request may go to one address and layer downloads to another. When writing rules, avoid the assumption "I can reach the application, so everything must work"; actually try the download.

Keeping a record of the redirects makes diagnosis easier. Turn on your client's verbose output and watch the response codes; seeing which host the second connection is opened to solves most problems on its own. To test that the exit is genuinely being used, proxy checker tool you can use.

DIAGRAMThe redirect sequence in an artefact download
The redirect sequence in an artefact downloadA three-actor sequence diagram: the tunnel, API call, redirect and second tunnel steps between the developer, the proxy exit and GitLab.SEQUENCE DIAGRAMDeveloperProxy exitGitLabTunnel open requestArtefact request, token in the headerRedirect: object store addressA second tunnel for the new host

The redirect returned in the third step says that the content sits not in the application but in a separate object store. That is why the second tunnel in the fourth step is necessary.

An exit plan for your GitLab environment

Fixed addresses for runners and access lists, and regional exit options for distributed teams, are defined in the same panel.

Choose whichever you need from our residential proxies, datacenter proxies, IPv6 and ISP solutions. Every plan comes with unlimited options, 99.9% uptime, rotating proxies, sticky sessions and 24/7 support. Ideal for web scraping, ad verification, SEO monitoring and digital data collection.

ISP ProxyStatic Turkish IPs registered to an ISP

ISP-registered static Türkiye IPs; they combine datacenter speed with the reputation of a real carrier. Ideal for long sessions and low-ping use.

150₺/mo

Starting price for 1 month

500–1000 Mbit130+ SubnetsDDoS Protection
View Plans

PACKAGE CONTENTS

  • Vodafone and Türk Telekom carriers
  • DDoS protection
  • Personalized setup
  • The lowest ping values
  • 500-1000 Mbit down/up speed
  • HTTP & SOCKS5 protocol support
  • Automatic delivery
  • Turkey location

For social media management and anyone who wants long sessions with low ping.

Read product details
Mobile Proxy4G/5G carrier IPs

The most natural mobile traffic, on 4G carrier IPs; high success rates even on the strictest platforms. Ideal for social media and automation work.

239₺/day

Starting daily price

LTE 4G15-40 MbpsDedicated SIM
View Plans

PACKAGE CONTENTS

  • LTE 4G mobile connection
  • Vodafone · Turkcell · Türk Telekom
  • 30 GB quota
  • 15-40 Mbps connection speed
  • Dedicated SIM card infrastructure
  • Username & password or IP:Port
  • IP change link
  • HTTPS / SOCKS5 (UDP)

Ideal for social media and gaming users; a good fit for individuals.

Read product details
Residential ProxyReal home-user IP pool

A real home-user IP pool, for the highest trust and the widest geographic coverage. The right choice for data collection and regional testing.

350₺/30 Days

Starts at 5 GB / 30 days

50K Connections190+ CountriesSticky Session
View Plans

PACKAGE CONTENTS

  • Real residential (home-user) IP pool
  • Rotating and sticky sessions
  • City and state targeting
  • HTTP(S) and SOCKS5 protocols
  • 24/7 priority support
  • Activation in 2 minutes
  • Suitable for social media management
  • Flexible session management

The right choice for data collection, regional testing and multi-account management.

Read product details
IPv6 ProxyA large next-generation IPv6 pool

A large IPv6 pool; an economical solution for high-volume, cost-sensitive projects. Google Ads compatible and future-proof.

100₺/plan

Starts at 100 units (total)

/64 Subnet100-500 MbitNetfactor ISP
View Plans

PACKAGE CONTENTS

  • Netfactor / Turknet ISP infrastructure
  • Google Ads compatible IPv6s
  • /64 subnet options
  • HTTP & HTTP(S) support
  • Automatic delivery
  • Unused (clean) IP pool
  • 100-500 Mbit speed
  • Large IPv6 address pool

For anyone who needs Google Ads compatibility, high-volume use and an economical solution.

Read product details

You can also explore our Rotating Proxy and Datacenter Proxy you can explore our solutions, and to try them out our free proxy list you can use.

How do rate limits behave on public endpoints?

When a server receives a large number of requests in a short time, it may refuse to respond and return a directive stating when the request can be repeated. The correct client behaviour is to honour that directive: wait, then retry once. A script that retries continuously makes matters worse.

What the counter is kept against varies from setup to setup. For authenticated requests the measure is usually the user or the token; for unauthenticated requests the address the request comes from comes to the fore. In a self-hosted installation these thresholds are values set by the administrator and can be adjusted as needed.

StatusWhat the counter is most likely tied toThe right response
Script authenticated with a tokenUser or tokenReduce request frequency, cache the results
Unauthenticated public readsThe address the request comes fromAuthenticate the requests or give the team a separate exit
Shared office exitA shared address; everyone consumes the same counterMove heavy jobs to a separate exit
Self-hosted installationThresholds defined by the administratorMeasure the thresholds and adjust them to the job volume

The expectation that changing address will reset the counter is an assumption with no basis where limits are tied to a token. The lasting solution is always to fix the request pattern. For the general framework of pool management, rotating proxy page for more details.

Choosing the exit type and location

Development traffic has different priorities from social platform traffic. What matters here is not that the address "looks like it belongs to a real home" but that it is fixed, fast and recognisable. An address to be written into access lists must not change every week.

For that reason, the most suitable starting point for most teams is a datacenter proxy with a fixed address and high bandwidth, or an ISP proxy hosted on a provider network. Cloning and artefact downloads are high-volume tasks; measurable bandwidth is important for that reason.

There are two criteria in choosing a location: legal and geographic. Whichever country the team works in, having the exit in that region shortens the distance. For Europe-based teams a Germany or Netherlands exit, and for teams in Turkey a Turkey exit exit, are common preferences. You can compare the options location list .

Concurrency matters as much as bandwidth. Jobs running in parallel open several connections at once; when comparing products, look not only at monthly volume but also at how many simultaneous connections are allowed. To plan the volume side, bandwidth calculation article offers a practical method.

Accept from the outset that a proxy adds a stop in between and that this shows up in the initial connection time. Choosing an exit geographically close to the team limits this effect; but the aim is not to speed up the connection, it is to route traffic through a single auditable gateway.

Troubleshooting: symptoms and checkpoints

In development environments, faults usually appear as "some things work, some do not". This is a sign that coverage is only partly in place. The table below matches up the most common cases.

SymptomPossible causeCheckpoint
The interface opens but cloning hangsThe git client reads a separate configurationReview the client's own proxy keys
The artefact download is cut off partwayThe second host is out of scope or not permittedAdd the redirect target to the rule and the allow list
The job cannot reach a service on the internal networkThe exclusion list is incompleteWrite the internal hosts and network blocks into the list
The runner works but a sub-process cannot get outThe tool does not read the environment variableDefine the tool's own configuration separately
Certificate validation failsThere is an inspection layer in the middleConfirm that the organisation's root certificate is in the trust store
The exit address is not in the expected countryThe wrong endpoint or a fallback route is in playmy IP address Confirm the exit with

For certificate-related errors, the root certificate needs to be added in the right place rather than validation being turned off; the reason is TLS certificate validation is explained in that article.

A verification list before going live

Once you have finished the setup, opening a single page and saying "it works" is not enough. To show that coverage really is closed, run four independent checks: the exit address, domain resolution, the exclusion list and credential separation.

The exit address check is the simplest and should be done separately from both the browser and inside the runner; if the two give different results, your coverage is incomplete. The domain resolution check shows whether requests are going through the proxy and can be done with DNS leak test .

The exclusion list check is tested by reaching a service on the internal network: if access succeeds, the list has been written correctly. Credential separation is an operational check; every team and every automation should carry its own credentials, and a single shared record should not be used.

Documenting the checks is part of the setup too. Keeping a short note of the date, the environment and the result of each test tells you where to start when a fault appears months later, and spares a new team member from having to work the setup out from scratch.

Note

Do not print credentials into job logs and do not commit them to the repository. Proxy credentials are at least as sensitive as an access token; if they leak, not only your quota but your network visibility is affected. For the provider's logging policy, logging and privacy article.

DIAGRAMFour checks before going live
Four checks before going liveA four-item checklist: exit address, domain resolution, exclusion list and credential separation.CHECKIs the exit address in the expected region?Check separately from the browser and from the runnerIs domain resolution going through the tunnel?Verify with a leak testIs the exclusion list correct?Test it by reaching a service on the internal networkAre credentials separated?Every team and automation should carry its own record

The four checks are independent of one another; do not assume that because one passes the others do too. Repeat them all from both the browser and inside the runner.

Frequently asked questions about GitLab proxies

01Does a self-hosted installation on my own server need a proxy too?

If the application itself is on the internal network, routing traffic to it through the proxy is usually unnecessary and can break the connection. However, a proxy is meaningful for packages pulled from outside, container images and third-party services. In that case the right setup is to exclude internal addresses from the scope.

02How is a proxy defined on a runner?

Most runners read environment variables; the scope and the exclusion list are set with these variables. However, some tools launched inside a job expect their own configuration. Adding a small check to the job's first step that prints the exit address shows that coverage really is in place.

03Why does an artefact download go to a different address?

In most setups the content sits not in the application itself but in an object store. The application generates a temporary, signed address and redirects the client there, and the client opens a second connection to this new host. If your rule does not cover that target, the download falls outside the scope.

04Does changing the exit address help when I hit a rate limit?

Not for authenticated requests; the counter is tied to the user or the token. For unauthenticated reads the counter may be tied to the address, but the lasting solution is to reduce request frequency, cache results and honour the wait directive the server returns.

05Can the same exit be used by both the internal team and an external agency?

It can, but separating them is more manageable. Giving the external team a separate exit means that when the contract ends you only shut down that exit, leaving the internal team unaffected. Keep credentials separate by group as well.

06I am getting a certificate error — should I turn off validation?

No. The error usually stems from an inspection layer in the middle presenting its own certificate. The correct solution is to add the organisation's root certificate to the client's trust store. Turning off validation genuinely makes the connection untrustworthy.

07Which exit type suits this work?

Because the address written into access lists needs to be fixed, datacenter or ISP-based static exits stand out. As repository size and the number of artefacts grow, monthly volume builds up quickly; so when looking at the price list, assess the committed data amount and the concurrent session ceiling together.

Related content

NEXT STEP

Manage your GitLab environment with a single exit scheme.

Separate exits for team access, runners and artefact traffic are defined from the same panel.

FREEPROXY.TR

Looking for a free proxy? You're in the right place

A complete proxy platform where you can browse up-to-date free proxy addresses, compare HTTP and SOCKS proxy types, and check your proxy connections with free tools.