Downloads, CDN, and Delivery Methods - softerfish/fyuhls GitHub Wiki

Downloads, CDN, and Delivery Methods

Fyuhls separates the public download experience from the actual delivery method used underneath.

That matters because the page a user sees and the transport path used to deliver the bytes are not always the same thing.

The app can still show the normal download page while deciding whether the final transfer should use:

  • app-controlled PHP delivery
  • direct object-storage delivery
  • CDN redirect
  • Nginx accelerated delivery
  • Apache X-SendFile
  • LiteSpeed internal delivery

The basic model

Fyuhls decides download behavior based on:

  • file state
  • package limits and gating
  • security rules
  • delivery method configured on the storage node
  • CDN settings
  • whether rewards or fraud proof requires tighter control

The download page vs the transfer path

A download can still go through:

  • wait timers
  • captcha
  • share fields
  • package checks
  • country or account gating
  • abuse reporting UI

before the file bytes are actually handed off. That handoff is where the delivery method matters.

Main delivery methods

App-controlled PHP

Fyuhls stays in the middle of the transfer logic.

Use it when you want:

  • strongest application control
  • the safest compatibility path
  • a simpler troubleshooting path

Direct object-storage delivery

Fyuhls can redirect the client toward the storage origin more directly for some public object-storage files.

CDN redirects

Fyuhls can redirect eligible public files to a CDN base URL when configured.

This is useful when:

  • you have a clean public CDN hostname
  • you want lower origin pressure
  • you want better geographic delivery

Nginx accelerated delivery

Nginx can accelerate delivery while keeping Fyuhls in control of authorization and handoff. Fyuhls can also integrate with a dedicated Nginx completion log path for completion-aware workflows.

Apache X-SendFile

Apache can hand off actual file serving after Fyuhls approves access.

LiteSpeed internal delivery

LiteSpeed can offer a similar accelerated handoff path.

Config Hub settings that affect downloads

Most site-wide delivery behavior lives in:

  • Admin > Config Hub > Downloads

Important settings there include:

  • require account to download
  • block downloads by country
  • track active download connections
  • process remote URL downloads in background
  • enable streaming support
  • Nginx completion log path
  • Nginx completion retention
  • Nginx completion max lines per run
  • enable CDN redirects for eligible public object-storage files
  • CDN base URL

The same user-facing download family now shares a more consistent rendering path for:

  • normal download pages
  • file not found states
  • private-file states
  • VPN or proxy blocked states
  • account-required and region-blocked states
  • limit and expired-link states

That matters because ad placement and blocked-state messaging are now much more consistent across those pages.

Package rules still matter

Even if delivery is technically available, package settings can still control:

  • whether downloads require login
  • wait times
  • daily bandwidth allowance
  • concurrent download limits

So a delivery issue is not always a storage issue. Sometimes it is simply a package rule.

Live Downloads and active tracking

If Track Active Download Connections is enabled, Fyuhls can monitor current download sessions more actively. That matters for:

  • concurrent-download limits
  • live download inspection
  • some support and fraud-review workflows

Nginx completion log path

This tells Fyuhls where the dedicated Nginx completion access log lives so the app can ingest trustworthy completion events for eligible workflows.

If this is wrong:

  • completion events can be skipped
  • reward proof can degrade
  • admin warnings can appear about missing trusted completion data

CDN use cases and limits

CDN redirects are great when:

  • files are public
  • you want lower origin pressure
  • you want edge caching

They are a poor fit when:

  • the file should stay tightly app-controlled
  • you depend on transport behavior that requires tighter app visibility
  • you need delivery behavior that should remain tightly coupled to rewards verification or fraud review

Streaming vs ordinary downloads

Streaming support is separate from standard file downloads. A working stream flow does not prove that ZIP, PDF, or EXE delivery is configured correctly.

How to troubleshoot delivery problems

Use this order:

  1. identify the storage node used by the file
  2. identify that node’s delivery method
  3. check package rules and guest/account restrictions
  4. check whether CDN redirects are enabled
  5. check whether the file is eligible for the configured path
  6. review System Status and delivery diagnostics
  7. if using Nginx completion-aware behavior, verify the log path and log format

Common problems

"Downloads work, but rewards proof seems wrong"

Check:

  • whether you are using a start-based or completion-aware path
  • Nginx completion log configuration
  • whether the path is appropriate for your payout-proof requirements
  • whether the Security page is using ProxyCheck Intelligence mode when you expect proxy/VPN signals to feed Rewards Fraud without blocking downloads

"The CDN redirect is wrong"

Check:

  • CDN base URL
  • path assumptions
  • whether the file is actually eligible

"Users get the normal page but slow transfers"

Check:

  • whether the file is falling back to app-controlled PHP
  • whether CDN or accelerated delivery is actually active
  • whether the storage node and server path are healthy

Best practices

  • decide delivery method intentionally per environment
  • keep package rules and delivery rules mentally separate
  • use CDN redirects only for clean, trusted public delivery paths
  • verify Nginx completion-log settings if you depend on completion-aware workflows
  • test a real download path after changing storage or delivery settings

Short version

Fyuhls always owns the download decision, but the final byte path can vary. If you understand the difference between the user-facing flow and the underlying delivery method, troubleshooting becomes much easier.

⚠️ **GitHub.com Fallback** ⚠️