ollama pull model_name:tag can be very slow in some regions, and the download process is not always stable.
If your issue looks like repeated interruptions halfway through a large model download, with errors such as TLS handshake timeout or unexpected EOF, the bottleneck may not be registry.ollama.ai itself, but the actual download path after the redirect.
This article walks through a simple troubleshooting approach: first get the real model file URLs, then confirm where the traffic actually ends up, and finally optimize only the domains that matter.
Get the model file download URLs
You can use the following project to extract the manifest and blob download URLs for an Ollama model directly:
https://github.com/Gholamrezadar/ollama-direct-downloader
Using gemma4:latest as an example, you can extract links like the following.
Manifest URL
|
|
Blob URLs
|
|
If you only want a quick verification, you can also download the manifest and blobs directly with curl:
|
|
The real download URL after the redirect
If you try downloading one of the blobs with wget, you will notice that the request does not stay on registry.ollama.ai. It gets redirected to a Cloudflare R2 object storage URL:
|
|
There are a few key details in the log:
registry.ollama.aireturns307 Temporary Redirect- The final download URL lands on
*.r2.cloudflarestorage.com - The large file transfer is actually being served by the object storage domain behind the redirect
This matters because if your proxy or routing rules only cover registry.ollama.ai but not *.r2.cloudflarestorage.com, downloads can still be slow or repeatedly interrupted.
Here is one example of an actual redirect log:
|
|
Adjust your network settings
Once you confirm the real download path, the troubleshooting direction becomes much clearer.
If you are using a proxy, split routing, or custom DNS, check these first:
- Whether
registry.ollama.aiand*.r2.cloudflarestorage.comare using the same stable route - Whether your proxy rules cover only the former but miss the latter
- Whether your current outbound path is suitable for sustained multi-GB downloads
The key issue here is not simply whether the official site opens, but whether the redirected object storage path is stable enough for long-running large-file transfers. In many cases, the real bottleneck is the Cloudflare R2 layer rather than the registry domain in front of it.
Before-and-after comparison
Here is one real-world example while downloading gemma4:31b-it-q8_0.
Before adjusting the network path, the download was slow and failed midway:
|
|
After the adjustment, the same model download became noticeably faster and more stable:
|
|
This does not mean every network environment will see the same improvement, but it does support one useful conclusion: the bottleneck may be the actual large-file download path rather than the Ollama client itself.
A more practical troubleshooting order
If you run into the same issue, this order usually works well:
- Run
ollama pullorollama runonce and confirm the issue is reproducible. - Test a blob URL with
wgetorcurl -Land confirm whether it redirects to*.r2.cloudflarestorage.com. - Adjust your proxy or routing only for the real download domain, then test speed and stability again.
The benefit of this order is that each step validates one clear hypothesis, so you do not have to troubleshoot blindly.
Conclusion
When ollama pull is slow, the problem is often not that registry.ollama.ai is unreachable, but that the Cloudflare R2 path actually serving the large files is unstable.
So instead of retrying over and over, a better approach is to identify the real download path first and optimize the network route where the traffic actually lands.