---
title: Why do I get "Blocked IP address detected"?
description: Langfuse rejects LLM connection, webhook, blob storage, and media storage URLs that resolve to private or reserved IP ranges. Here is why, and how to allow internal endpoints on self-hosted Langfuse.
tags: [self-hosting, administration, platform]
---

# Why do I get "Blocked IP address detected"?

Langfuse calls some user-configured URLs on your behalf: LLM connection base URLs, webhook targets, blob storage export endpoints, and external media storage endpoints. To prevent server-side request forgery (SSRF), it resolves the hostname and rejects the URL with `Blocked IP address detected` when any resolved IP is in a private, loopback, link-local, or otherwise reserved range (for example `10.0.0.0/8`, `192.168.0.0/16`, `127.0.0.0/8`, or `169.254.0.0/16`). Hostnames such as `localhost`, `*.internal`, and `host.docker.internal` fail with `Blocked hostname detected`. A hostname that does not resolve fails as well.

The check runs when you save the setting and again on every request and redirect.

  On IPv6-only networks with DNS64, even public provider hostnames can resolve to the NAT64 range `64:ff9b::/96`. Langfuse blocks this range, so a public endpoint can fail with this error too. Allow the host explicitly (see below) or give the Langfuse containers IPv4 egress.

## Langfuse Cloud

The check is always enforced and cannot be relaxed. LLM connection base URLs must use `https://`. Point the connection at a publicly resolvable endpoint, for example a gateway with a public hostname.

## Self-hosted Langfuse

Allow specific internal endpoints per feature with comma-separated lists:

| Feature         | Variables                                                                                                                                |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
| LLM connections | `LANGFUSE_LLM_CONNECTION_WHITELISTED_HOST`, `LANGFUSE_LLM_CONNECTION_WHITELISTED_IPS`, `LANGFUSE_LLM_CONNECTION_WHITELISTED_IP_SEGMENTS` |
| Webhooks        | `LANGFUSE_WEBHOOK_WHITELISTED_HOST`, `LANGFUSE_WEBHOOK_WHITELISTED_IPS`, `LANGFUSE_WEBHOOK_WHITELISTED_IP_SEGMENTS`                      |
| Blob storage    | `LANGFUSE_BLOB_STORAGE_ENDPOINT_WHITELISTED_HOST`, `..._WHITELISTED_IPS`, `..._WHITELISTED_IP_SEGMENTS`                                  |
| External media  | `LANGFUSE_EXTERNAL_MEDIA_STORAGE_ENDPOINT_WHITELISTED_HOST`, `..._WHITELISTED_IPS`, `..._WHITELISTED_IP_SEGMENTS`                        |

A hostname in `_WHITELISTED_HOST` skips the IP check. `_WHITELISTED_IPS` takes exact IPs and `_WHITELISTED_IP_SEGMENTS` takes CIDR ranges such as `10.0.0.0/8`. Set the variables on both the web and worker containers, because both make outbound requests.

  There is no setting that turns the check off for all targets. Every internal endpoint has to be listed explicitly, because anything on these lists is exempt from SSRF protection.

For the full list of variables, including the positive `*_ALLOWED_HOSTS` allowlists, see [Outbound URL allowlists](/self-hosting/configuration/hardening#outbound-url-allowlists) and [LLM connection troubleshooting](/docs/administration/llm-connection#blocked-ip-address).

<!-- agent-instructions -->

---

## Agent Instructions

This page is part of the [Langfuse](https://langfuse.com) documentation, published as plain Markdown for AI agents. Every page is available as Markdown by appending `.md` to its URL, or by sending an `Accept: text/markdown` header. This page: `https://langfuse.com/faq/all/blocked-ip-address-detected.md`.

### Querying these docs

If the answer is not on this page, query the documentation instead of guessing:

- **Semantic search** across all Langfuse docs, returning an answer with the relevant pages and excerpts. Ask a specific, self-contained question:

  ```bash
  curl -sG "https://langfuse.com/api/search-docs" --data-urlencode "query=How do I trace a LangGraph agent?"
  ```

- **Index of every page**: <https://langfuse.com/llms.txt>, with per-section indexes [llms-docs.txt](https://langfuse.com/llms-docs.txt), [llms-integrations.txt](https://langfuse.com/llms-integrations.txt), and [llms-self-hosting.txt](https://langfuse.com/llms-self-hosting.txt).

### Before writing Langfuse code

- **Install the [Langfuse Agent Skill](https://langfuse.com/docs/api-and-data-platform/features/agent-skill).** It encodes Langfuse's own best practices for instrumentation, prompt management, and evaluation, and materially improves results.
- **Read [What does a good trace look like?](https://langfuse.com/docs/observability/best-practices.md)** before instrumenting an application.
- **Verify endpoints, parameters, and response fields** against the [API reference](https://api.reference.langfuse.com) instead of inferring them from code examples.
- **Use the [Langfuse CLI](https://langfuse.com/docs/api-and-data-platform/features/cli)** (`npx @langfuse/cli api <resource> <action>`) to read or write traces, prompts, datasets, and scores from the terminal.

Found an error in these docs? Please open an issue at <https://github.com/langfuse/langfuse-docs/issues>.
