Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsWindows FixRecommendedWindows errors stealing your time? Find the fix fastScan stability, cleanup and performance issues.Fix Now×
Skip to content
VGSources
Blog

How to Fix a 504 Gateway Timeout Error on Your Server

Learn what a 504 Gateway Timeout means and how to trace it from CDN to reverse proxy, application, database, and external services. Includes NGINX and Apache settings, curl tests, Cloudflare diagnostics, and a safe recovery checklist.
Length12 min Posted Quest giverVGSources Team
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A 504 Gateway Timeout means a gateway or proxy did not receive a timely response from an upstream service. The durable fix is to identify which hop timed out, restore the slow or unreachable dependency, and then set timeout budgets that match the service’s measured behavior. Increasing a timeout can hide the symptom while increasing queueing and resource exhaustion, so treat it as a final tuning step rather than the first remedy.

What a 504 error means

HTTP status 504 is generated by a server acting as a gateway or proxy. RFC 9110 defines it this way: “The 504 (Gateway Timeout) status code indicates that the server, while acting as a gateway or proxy, did not receive a timely response from an upstream server it needed to access in order to complete the request.”

As an Amazon Associate I earn from qualifying purchases.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

In a typical request, several layers may be involved:

  • Browser or game client
  • CDN or edge proxy
  • Load balancer
  • NGINX, Apache, or another reverse proxy
  • Application server and worker processes
  • Database, cache, queue, or external API

The status alone does not identify the slow layer. A proxy may be waiting for a TCP connection, uploading the request, reading response headers, or waiting for an application dependency. MDN notes that 504 causes generally require investigation and debugging by the server administrator; the site may also recover when a temporary overload or failed service clears.

#1 Best Overall
Dell Optiplex 3060 Desktop Computer | Intel i5-8500 (3.2) | 32GB DDR4 RAM | 1TB SSD Solid State | Built in WiFi | Bluetooth | Windows 11 Professional | Home or Office PC (Renewed)
  • [INTEL POWERED CONTENT] - Built with a 8th Generation Hexa-Core Intel i5 and 32GB of DDR4 RAM; Modern, Windows 11 ready, with 4K support, Executive multitasking, media streaming and smooth, multi-tab web browsing; Perfect as an all-purpose multimedia computer; built for content creators; Plenty of RAM and Mass storage for photo and video editing powered by Intel HD 630
  • [LATEST WIRELESS TECH] - This Dell Desktop Computer easily connects to the internet through the Built In WiFi / Bluetooth
  • [SOLID STATE STORAGE] - This Dell Computer setup comes with an ultra-fast 1TB Solid State Drive (SSD); Setup as the primary boot device; Boot and load programs with lightning speed ; Additional expansion available
  • [BUY & OWN WITH CONFIDENCE] - From the world's largest Microsoft Authorized Refurbisher; Quality Guarantee and Free Tech Support; Award-winning Customer Service; | Support Sustainable Business
  • [MODERN HI-SPEED PORTS] - USB 3.0 (x4) | USB 2.0 (x4) | DisplayPort (x1) | HDMI Port (x1) | Audio Combo Jack (x1) | Audio Out (x1) | RJ-45 Ethernet (x1) | Internal SATA (x3)

Start with evidence, not a timeout change

Capture one complete failure before changing configuration. Use UTC so records from different systems can be compared accurately.

  1. Record the request. Save the URL, HTTP method, UTC timestamp, response headers and body, request or trace ID, client network, and whether the failure affects every visitor or only one network.
  2. Compare endpoints. Request a known-fast health endpoint and the failing route. A healthy endpoint alongside one failing route points toward route-specific work, a query, or a downstream call.
  3. Preserve the response branding. Note whether the page is branded by a CDN, load balancer, reverse proxy, or your application. The responding layer determines which logs and limits matter.
  4. Check recurrence. Record whether failures began after a deploy, configuration change, traffic spike, database migration, certificate change, or infrastructure incident.

A useful incident record contains the exact timestamp, hostname, path, status code, request ID or provider Ray ID when available, and a sanitized reproduction command. Do not publish authorization headers, cookies, API keys, or personal data in a ticket or bug report.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Find which layer returned the 504

Cloudflare documents two broad possibilities: the origin generated the 502 or 504, or Cloudflare generated it while trying to reach the origin. Other CDNs and load balancers have the same distinction. An origin-generated page often carries your server’s headers or application formatting; an edge-generated page may use the provider’s branding and include an edge request identifier.

When the origin generated the response

Inspect the reverse-proxy and application logs first. The proxy accepted the client request but could not obtain a response from its configured upstream within its budget. The relevant evidence is usually in the proxy error log, followed by application and dependency logs at the same UTC second.

When the edge generated the response

Check whether the origin answers for the exact hostname requested through the CDN. Verify DNS, firewall allowlists, TLS certificate and SNI behavior, and the origin port. If the provider cannot reach the origin, supply its support team with the hostname, UTC timestamps, edge request or Ray IDs, and a sanitized curl reproduction.

When only one network sees the error

A network-specific failure suggests DNS differences, an intermediary firewall, an IPv4-versus-IPv6 path, or a regional routing problem. Test from the affected network and from the proxy host; do not assume that a successful request from your laptop proves that the production path works.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Correlate logs across the request path

Search every layer for the same timestamp and request identifier. A practical order is:

  1. CDN or edge access and error logs
  2. Load-balancer logs and target-health events
  3. NGINX or Apache access and error logs
  4. Application logs, traces, and worker metrics
  5. Database, cache, queue, and external-service logs
  6. Host and container events, including restarts and out-of-memory kills

NGINX messages containing upstream timed out confirm that a timeout occurred while communicating with the upstream. Read the rest of the message to identify the phase. A connect timeout means the proxy could not establish a connection; a send timeout concerns uploading the request; a read timeout means the proxy connected but did not receive data quickly enough.

Rank #2
Sale
UGREEN NAS DH2300 2-Bay for Beginners & Personal Users, Phone Backup | AI Album, Private Cloud/Remote Access, File Sharing, Multi-Device Backup, Home Entertainment, 4GB RAM on Board (Diskless)
  • Entry-level NAS Personal Storage:UGREEN NAS DH2300 is your first and best NAS made easy. It is designed for beginners who want a simple, private way to store videos, photos and personal files, which is intuitive for users moving from cloud storage or external drives and move away from scattered date across devices. This entry-level NAS 2-bay perfect for personal entertainment, photo storage, and easy data backup (doesn't support Docker or virtual machines).
  • Set Your Devices Free, Expand Your Digital World: This unified storage hub supports massive capacity up to 64TB.*Storage drives not included. Stop Deleting, Start Storing. You can store 22 million 3MB images, or 2 million 30MB songs, or 43K 1.5GB movies or 67 million 1MB documents! UGREEN NAS is a better way to free up storage across all your devices such as phones, computers, tablets and also does automatic backups across devices regardless of the operating system—Window, iOS, Android or macOS.
  • The Smarter Long-term Way to Store: Unlike cloud storage with recurring monthly fees, a UGREEN NAS enclosure requires only a one-time purchase for long-term use. For example, you only need to pay $459.98 for a NAS, while for cloud storage, you need to pay $719.88 per year, $2,159.64 for 3 years, $3,599.40 for 5 years. You will save $6,738.82 over 10 years with UGREEN NAS! *NAS cost based on DH2300 + 12TB HDD; cloud cost based on 12TB plan (e.g. $59.99/month).
  • Blazing Speed, Minimal Power: Equipped with a high-performance processor, 1GbE port, and 4GB RAM on Board, this NAS handles multiple tasks with ease. File transfers reach up to 125MB/s—a 1GB file takes only 8 seconds. Don't let slow clouds hold you back; they often need over 100 seconds for the same task. The difference is clear.
  • Let AI Better Organize Your Memories: UGREEN NAS uses AI to tag faces, locations, texts, and objects—so you can effortlessly find any photo by searching for who or what's in it in seconds. It also automatically finds and deletes similar or duplicate photo, backs up live photos and allows you to share them with your friends or family with just one tap. Everything stays effortlessly organized, powered by intelligent tagging and recognition.

Apache records the proxy request and backend errors in its configured logs. Match the request path and virtual host before changing a global setting: a directive in the wrong context can leave the active route unchanged.

Test the upstream from the proxy host

Test from the machine, container, or network namespace that makes the upstream call. Use the same hostname, port, protocol, path, and important headers used by the proxy. A request from a developer workstation can take a different DNS and network route.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -v --connect-timeout 5 --max-time 30 http://upstream.example/health

Use an authenticated-safe endpoint. If the service requires authentication, provide a short-lived test credential through a protected mechanism rather than pasting it into a shell history or support ticket.

Interpret the result

  • Connection refused: the process is stopped, listening on another port, or blocked by a local policy.
  • Connection timeout: investigate routing, security groups, firewalls, listener health, and source-address allowlists.
  • TLS or certificate failure: check the protocol, certificate chain, hostname, and SNI sent by the proxy.
  • Fast 4xx or 5xx: network reachability works; investigate routing, authentication, application errors, or an unhealthy dependency.
  • Slow response or no response: inspect application workers, database queries, locks, queues, and external calls.
  • Fast success: compare the test with the production request. Differences in headers, path, DNS answer, connection pooling, concurrency, or proxy configuration can explain why the public request still times out.

Check health and capacity before touching timeouts

A gateway waits because an upstream is unavailable, overloaded, or taking longer than its budget. Check these conditions at the failure time:

  • CPU saturation, memory pressure, swap activity, and file-descriptor exhaustion
  • Application worker or process limits and restart loops
  • Connection-pool saturation to the database, cache, or another service
  • Blocked threads, event-loop stalls, lock contention, and queue growth
  • Slow queries, missing indexes, deadlocks, and long transactions
  • Out-of-memory kills, container eviction, and host or instance replacement
  • Recent deploys, migrations, feature-flag changes, or dependency incidents
  • External APIs that are slow, rate-limited, or intermittently unavailable

Cloudflare lists excessive origin load, crashes, network failures, and applications or services that timed out among the origin-side causes to investigate. A healthy proxy cannot compensate for an application that has exhausted its workers or a database that cannot accept another connection.

Verify the network path

Once logs show a reachability problem, verify each boundary rather than changing application code:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Resolve the upstream hostname from the proxy host and confirm that the answer is the intended address.
  2. Confirm that the route and destination port are reachable from the proxy’s subnet or container network.
  3. Check security groups, host firewalls, network ACLs, and service-mesh policies.
  4. Confirm that the origin allows the CDN or load balancer’s current source addresses.
  5. For HTTPS, verify the certificate name, trust chain, protocol version, and SNI value.
  6. Check IPv4 and IPv6 separately when DNS publishes both address families.

Do not broadly disable a firewall to test. Make a narrow, logged rule for the required source and port, test it, and remove temporary access after the incident.

Fix the component that is actually slow

Choose the remedy according to the failing phase and layer. Typical fixes include:

Rank #3
Sale
UGREEN NAS DXP2800 2-Bay for Advanced Home Users, Remote Workers & Creators | Home Media & Data Center, Docker & VM, Plex, Fast File Transfer, Intel N100, 8GB DDR5, 2.5GbE, 2x M.2 NVMe, 4K HDMI(Diskless)
  • 【Advanced Home Data & Media Hub】For advanced home users who need phone backup, file storage, and centralized data management. Centralize family photos, 4K videos, movies, computer backups, and personal files in one place while running multiple apps for home entertainment and everyday data management. Suitable for households with growing digital libraries and multiple NAS use cases.
  • 【Built for Creators, Media Servers & Advanced Apps】Powered by the Intel N100 Quad-Core CPU, 8GB DDR5 RAM, 2.5GbE networking, and dual M.2 NVMe slots, DXP2800 handles large files and heavier workloads with ease. Run Docker, virtual machines, and media server applications compatible with Plex—ideal for content creators, tech enthusiasts, and advanced home users managing 4K videos, RAW photos, personal media libraries, and multiple NAS apps.
  • 【Up to 80TB for Growing Digital Libraries】 Supports up to 80TB of storage using two HDD bays and two M.2 NVMe SSD slots for family photos, movies, RAW photos, 4K videos, work files, and device backups. AI photo management supports recognition of people, objects, scenes, and locations, album organization, and duplicate photo detection. HDDs and SSDs are not included.
  • 【AI-powered Home Surveillance】Turn DXP2800 into a centralized home surveillance hub by connecting compatible network cameras and storing recordings locally on your NAS. AI-powered features include Face Recognition, People Detection, and Pet Detection, helping advanced home users review important events more efficiently while managing home surveillance and personal data in one place.
  • 【One data Center Across Your Devices】Keep files from desktops, laptops, phones, tablets, and other devices together instead of scattered across cloud accounts and external drives. Access, back up, organize, and share data across Windows, macOS, Android, iOS, web browsers, and compatible smart TVs—ideal for creators and advanced home users working across multiple devices.
  • Optimize a query, add an appropriate index, shorten a transaction, or remove an avoidable N+1 call.
  • Restore a crashed process, correct its listener address, or fix a restart loop.
  • Increase worker or instance capacity after confirming that the database and other dependencies can handle the additional concurrency.
  • Repair DNS, routing, TLS, firewall, or source-address allowlist errors.
  • Add connection pooling with bounded limits and sensible idle cleanup.
  • Move long-running work to a queue and return a job identifier instead of keeping an HTTP request open.
  • Cache safe, repeatable results and avoid performing expensive work on every request.
  • Use retries only for operations that are safe to retry, with bounded exponential backoff and a total deadline.

A timeout increase is not a substitute for a sick upstream. Letting more requests wait can consume every worker and connection, turning a localized slowdown into a system-wide outage.

Set deliberate timeout budgets

After the upstream is healthy, align the budgets at every hop. The outer proxy must allow enough time for the inner operation, but each layer still needs a finite deadline to protect capacity. Include connection setup, request transmission, application work, dependency calls, response transmission, and any retry allowance in the total budget.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Failure phase What the proxy is waiting for First checks
Connect A TCP or TLS connection to the upstream Listener health, DNS, route, firewall, port, TLS and SNI
Send Writing the request to an established upstream connection Upstream receive capacity, stalled sockets, request size and network health
Read Response data or headers from the upstream Workers, database queries, locks, queues and external dependencies
Dependency The application waiting on another service Dependency latency, connection pools, retries and circuit-breaker behavior

For example, an application with a measured 20-second worst-case operation may need an internal dependency deadline below 20 seconds, a proxy read budget above the application’s complete response time, and an edge budget that includes proxy overhead. Select values from measurements and concurrency limits, not from a generic “set it to five minutes” rule.

Fixing 504 errors in NGINX

NGINX’s proxy module separates connection, send, and read timeouts. proxy_connect_timeout controls establishment of a connection to the proxied server; its default is 60s, and in practice it usually cannot exceed 75 seconds because of platform TCP behavior. The send and read directives govern different phases and should not be raised indiscriminately.

Example location block

location /api/ {
    proxy_pass http://app_backend;
    proxy_connect_timeout 5s;
    proxy_send_timeout 30s;
    proxy_read_timeout 60s;
}

These values are an example pattern, not a universal recommendation. Choose them from measured service behavior and the capacity budget. A five-second connect limit is sensible only when the network and upstream normally connect well within that time; a 60-second read limit is appropriate only when the route is expected to take that long and the backend can sustain waiting clients.

Apply and verify the change

  1. Identify the effective server and location block handling the failing hostname and path.
  2. Edit the configuration in the correct file or deployment template.
  3. Run nginx -t to validate syntax.
  4. Use nginx -T when needed to inspect the complete rendered configuration and confirm that the directive is not overridden elsewhere.
  5. Reload NGINX safely using your platform’s service manager.
  6. Reproduce the request and confirm that the expected route handled it.
  7. Watch error logs, latency, timeout rate, worker utilization, and upstream connection counts.

If the error persists, compare the new log phase with the old one. A longer read timeout will not fix a connection refusal, incorrect upstream name, or blocked port.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Fixing 504 errors in Apache HTTP Server

Apache mod_proxy provides ProxyTimeout, the network timeout for proxied requests. Its default is the global Timeout value. Individual ProxyPass workers can also set connectiontimeout and timeout.

Example ProxyPass configuration

ProxyPass        "/api" "http://backend.example.com/api" connectiontimeout=5 timeout=60
ProxyPassReverse "/api" "http://backend.example.com/api"
# Or set a proxy-wide budget when appropriate:
# ProxyTimeout 60

Use a per-route value when only one backend needs a different budget. A proxy-wide setting affects every proxied request in that context and therefore has a larger blast radius.

Rank #4
Dell PowerEdge R730xd Server 24B SFF 2U, 2X Intel Xeon E5-2690 v4 2.6Ghz (28-cores Total), 128GB DDR4 RAM, 4X 1.2TB 10K SAS 2.5” 12Gb/s HDD, H730P 2GB RAID, NIC 10Gb + I350 1Gb (Renewed)
  • Dell PowerEdge R730xd 24B SFF 2U Server
  • 2x Intel Xeon E5-2690 v4 2.6Ghz 14-Core (28-cores Total)
  • 128GB DDR4 RAM – 4x 1.2TB 10K SAS 2.5” 12Gb/s
  • Dell H730P mini 2GB 12Gb/s RAID
  • 2x 750W PSU - 2x 10Gb SFP+ 2x 1Gb (RJ45) NIC

Apply and verify the change

  1. Confirm the active virtual host and the order of overlapping ProxyPass rules.
  2. Edit the correct virtual-host or server configuration.
  3. Run the Apache configuration check supplied by your distribution before reloading.
  4. Reload gracefully so existing requests can finish according to the server’s normal shutdown behavior.
  5. Verify backend access and error logs for the same request.
  6. Measure latency and concurrency after the change; revert if queues or memory use rise without resolving the root cause.

A longer ProxyTimeout is justified only when the endpoint is expected to take that long and the backend has sufficient workers, connections, memory, and dependency capacity.

Cloudflare, CDN, and load-balancer cases

First establish whether the edge or origin produced the page. If the origin is responsible, make sure it answers for the requested hostname and inspect load, crashes, network failures, and timed-out applications or services. If the edge is responsible, review the provider’s edge diagnostics and reachability requirements.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Provide a hosting or CDN support team with:

  • Hostname and exact path
  • UTC timestamps covering several failures
  • Provider Ray ID or request ID
  • Origin and edge status information
  • Sanitized curl output showing the response headers
  • Whether a direct, controlled request from the proxy host succeeds

Do not assume that bypassing the CDN is a safe production fix. A direct-origin test can expose an address, bypass security controls, or send traffic to a host that is not sized for public clients. Keep it limited to an authenticated, low-volume diagnostic request.

Distinguish a 504 from related errors

Status Typical meaning in a proxy path Useful first question
502 Bad Gateway The gateway received an invalid response or could not use the upstream response Did the upstream close early, return malformed data, or fail a protocol check?
504 Gateway Timeout The gateway did not receive a timely response from an upstream Which phase and hop exceeded its deadline?
503 Service Unavailable The service is unavailable or deliberately refusing work Is the target unhealthy, draining, overloaded, or under a maintenance policy?
408 Request Timeout The server timed out while waiting for the client request Is the client upload slow or incomplete?

Status codes can be transformed by intermediaries, so always confirm with response headers and logs rather than relying on the number alone.

Compare possible fixes by failure phase and blast radius

When several changes appear plausible, evaluate each on four axes:

  1. Failure phase: connect, send, read, or an application dependency.
  2. Layer: CDN or load balancer, reverse proxy, application, database, or external API.
  3. Latency versus capacity: whether extra wait time increases queueing, open connections, memory use, and concurrency pressure.
  4. Blast radius: one route, one upstream pool, one region, or the entire service.
Observed symptom Lower-blast-radius action Action to avoid as a first move
One endpoint has slow database queries Profile and optimize that query or make the operation asynchronous Raise the timeout for every route
All routes cannot connect to one backend Check listener, DNS, firewall, and target health Increase read timeout
Only one region fails Compare regional DNS, routes, security rules, and capacity Change global proxy settings without regional evidence
Traffic spike exhausts workers Control concurrency, scale capacity, and shed nonessential work Allow requests to wait indefinitely

Retest and monitor after the change

Use a controlled request that follows the public path, not only a direct backend call. Verify the expected 2xx response, response body, headers, and cache behavior. Test both the previously failing route and a normal route.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Monitor for at least one representative traffic period:

  • 504 rate and total 5xx rate by route, region, and upstream
  • Latency percentiles, especially tail latency
  • Upstream connection errors and active connections
  • Worker utilization, queue depth, CPU, memory, and restarts
  • Database pool usage, slow queries, locks, and rejected connections
  • External dependency latency, error rate, and retry volume

Keep the incident timestamp, configuration diff, test command, and measured result in the operational record. If the same endpoint repeatedly approaches its deadline, redesign or split the work instead of repeatedly extending the budget.

Prevent recurring 504s

  • Define an explicit deadline for each outbound dependency and propagate a remaining-request budget.
  • Instrument traces so a request can be followed from edge to proxy, application, database, and external service.
  • Alert on tail latency, saturation, queue growth, and connection-pool exhaustion before 504s become the first visible symptom.
  • Use health checks that exercise meaningful dependencies without performing expensive production work.
  • Load-test long-running routes with realistic concurrency and failure scenarios.
  • Deploy gradually and compare timeout and latency metrics before and after each change.
  • Use circuit breakers or bounded retries for unreliable dependencies, and ensure retried operations are safe.
  • Prefer asynchronous jobs for work that cannot reliably complete within the public request budget.

Quick incident checklist

  1. Capture URL, method, UTC time, headers, body, and request ID.
  2. Determine whether the edge, load balancer, reverse proxy, or origin generated the response.
  3. Correlate logs across every hop and identify connect, send, read, or dependency phase.
  4. Test the exact upstream path from the proxy host with a safe curl request.
  5. Check capacity, worker health, pools, queues, databases, deploys, and restarts.
  6. Verify DNS, routing, port reachability, TLS/SNI, firewall rules, and source allowlists.
  7. Repair the slow or unreachable component.
  8. Align timeout budgets only after the upstream is healthy.
  9. Validate configuration, reload safely, reproduce through the public path, and monitor.

The Bottom Line

Fix the upstream condition that exceeded the gateway’s deadline, then align each proxy timeout with measured latency and available capacity. A 504 is a symptom of a broken or overlong request path—not a reason to increase every timeout blindly.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More quests from Patch Notes

  1. How to Set Up a RedM (RDR2) Server in 2026: License Key, txAdmin and server.cfg, Step by StepBlog11min
  2. Best RedM (RDR2) Server Hosting in 2026: Comparing Four Hosts on Slots, Memory and PriceBlog10min
  3. How to Host a Mindustry Server in 2026: server-release.jar, Port 6567 and the Commands That MatterBlog7min
Recommended PC Tool
Recommended PC Tool
Windows Errors? Fix Them Before They SpreadFree repair scan
Outdated Drivers Are Slowing You DownFree scan - exact matches

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.