What it means: Something requested a Cloudflare IP address directly, without a hostname Cloudflare can match to a website.
Free online tool — HTTP status code checker: instant results, no signup.
Requests the address and shows the status code and what the server sends back.
Cloudflare's text is short: "This error indicates that direct access to a Cloudflare IP address is not allowed", caused when "a client or browser directly accesses a Cloudflare IP address" (Cloudflare: Error 1003). The page title reads "Direct IP access not allowed", and the HTTP status is 403; the 1003 code is in the page body (Cloudflare 1xxx errors).
The reason is how Cloudflare works. Millions of websites share the same anycast addresses, and Cloudflare decides which site you want from the host name: the Host header for HTTP and the SNI field for HTTPS. A request to http://104.16.x.x/ carries an IP where the host name should be, so Cloudflare has no site to serve and answers 1003 instead. Nothing is broken on the website; the request is addressed wrongly.
| Source | How to recognise it | Fix |
|---|---|---|
| Someone typed or bookmarked an IP | The address bar shows an IP, often copied from a ping or dig output | Use the domain name |
| Hard-coded IP in an app, script or IoT device | Config files or firmware with an IP instead of a hostname; breaks for everyone at once | Configure the hostname; let DNS resolve it |
| Uptime monitor or health check pointed at the IP | Your own monitoring reports 403 while the site is up | Monitor the URL with the hostname |
| HTTP client that does not send the right Host or SNI | Requests built as https://IP/ plus a manual Host header; the TLS layer still sends no SNI | Connect by hostname and pin the IP at the resolver level |
| Testing the origin by the wrong IP | You meant to reach your server, but used the address that the proxied hostname resolves to, which is Cloudflare's | Use the origin's own IP from your hosting panel |
A reverse lookup of the IP or a WHOIS on it shows Cloudflare as the owner, which confirms you are talking to the edge rather than to a site's server.
https://www.example.com/, never https://104.16.x.x/. For a visitor this is the whole fix.curl -sv --resolve www.example.com:443:104.16.0.1 https://www.example.com/ -o /dev/null A manual -H 'Host: www.example.com' on an IP URL fixes HTTP but not HTTPS, because the TLS layer then sends no SNI.dig, which returns Cloudflare for proxied records) with --resolve, or a separate DNS-only hostname.104.16.0.1 www.example.com works because the browser still uses the hostname; an IP in the address bar does not.Automated clients are the most common source of 1003 after a site moves behind Cloudflare. Before the move, a monitor or partner integration pointed at the server's IP worked; after it, the old IP may still be the origin, while anything that was re-pointed at the new DNS answer now targets Cloudflare's addresses. Check three places. Uptime monitors and load-balancer health checks: they must request the full URL with the hostname, otherwise every check reports 403 while real visitors are fine. API clients and webhooks configured with an IP literal: replace it with the hostname, and if the partner needs fixed addresses for their own firewall, give them Cloudflare's published ranges. Embedded devices with an IP in firmware: these fail all at once and are slow to update, so keep a DNS name in the configuration from the start. In every case the request must carry the hostname both in the TLS handshake and in the HTTP Host header.
curl -s -o /dev/null -w '%{http_code}\n' http://104.16.0.1/
# 403
curl -s -o /dev/null -w '%{http_code}\n' https://www.example.com/
# 200The first request shows what any bare-IP request gets; the second, with the hostname, must return the site. For monitors and integrations, check their logs for 403s after the change. The HTTP status checker requests a URL by name and shows the status code and headers it receives.
HTTP status codes are three-digit numbers that the server returns for every request. They tell the browser and search crawlers what happened: success, redirect, or error.
Enter a code or keyword — instant result with description.
1xx Informational, 2xx Success, 3xx Redirect, 4xx Client Error, 5xx Server Error.
For each code: typical causes and concrete steps to resolve.
How each code affects indexing and link juice transfer in Google.
choosing correct status
redirect optimization
5xx error diagnostics
landing page check
HTTP monitor alerts when response code changes or 5xx appears.
Sign up freeMany sites share each Cloudflare address, and Cloudflare picks the site from the host name in the request. A bare IP names no site, so Cloudflare returns error 1003.
403 Forbidden. The 1003 code appears in the body of Cloudflare's error page.
Keep the hostname in the URL and override DNS, for example with curl --resolve www.example.com:443:IP. The request then carries the correct SNI and Host.
Use the origin's own IP address from your hosting provider, not the address your proxied hostname resolves to, which belongs to Cloudflare.
No. It only means the request was sent to a Cloudflare IP instead of your domain name. Requests that use the domain name are not affected.
Free plan — 10 monitors, checks every 5 min, no card required. Upgrade for 1-minute interval and multi-region monitoring.