phacility/phabricator · error · AphrontMalformedRequestException

This request reached a site which requires HTTPS, but the re

Error message

This request reached a site which requires HTTPS, but the request is not marked as HTTPS.

What it means

Thrown by 'bin/repository thaw --promote' when the device being promoted has no active binding to the repository's Almanac service. Promotion makes a device the authoritative leader, which is only meaningful for devices actively serving the service, so the workflow checks $service->getActiveBindings() for the device's PHID and refuses otherwise. Demotion, by contrast, is allowed for inactive devices too.

Source

Thrown at src/aphront/configuration/AphrontApplicationConfiguration.php:451

            pht(
              'This service is configured in cluster mode and the address '.
              'this request was received on ("%s") is not whitelisted as '.
              'a cluster address.',
              $server_addr));
        }
      }
    }

    $site = $this->buildSiteForRequest($request);

    if ($site->shouldRequireHTTPS()) {
      if (!$request->isHTTPS()) {

        // Don't redirect intracluster requests: doing so drops headers and
        // parameters, imposes a performance penalty, and indicates a
        // misconfiguration.
        if ($request->isProxiedClusterRequest()) {
          throw new AphrontMalformedRequestException(
            pht('HTTPS Required'),
            pht(
              'This request reached a site which requires HTTPS, but the '.
              'request is not marked as HTTPS.'));
        }

        $https_uri = $request->getRequestURI();
        $https_uri->setDomain($request->getHost());
        $https_uri->setProtocol('https');

        // In this scenario, we'll be redirecting to HTTPS using an absolute
        // URI, so we need to permit an external redirect.
        return $this->buildRedirectController($https_uri, true);
      }
    }

    $maps = $site->getRoutingMaps();
    $path = $request->getPath();

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Pick a device that currently has an active binding to the repository's service and re-run thaw --promote with it.
  2. If the device should be promotable, reactivate its Almanac binding for that service first.
  3. If the device was retired intentionally, promote a healthy active device instead (or demote the retired one with --demote, which permits inactive devices).

Example fix

# before
bin/repository thaw --promote repo-old R12

# after (promote a device with an active binding)
bin/repository thaw --promote repo-005 R12
Defensive patterns

Strategy: validation

Validate before calling

// Confirm the promote target has an active binding first:
$bindings = $service->getActiveBindings();
$bindings = mpull($bindings, null, 'getDevicePHID');
if (empty($bindings[$device->getPHID()])) { /* choose another device or reactivate binding */ }

Prevention

When it happens

Trigger: Running 'bin/repository thaw --promote repo-005 R12' where repo-005's binding to the repository service is disabled/inactive: $bindings = $service->getActiveBindings() indexed by device PHID lacks $device->getPHID(), so the check at PhabricatorRepositoryManagementThawWorkflow.php:222 throws.

Common situations: A device taken out of rotation (binding disabled) during maintenance and then chosen as promotion target by mistake; promoting a newly added device whose binding was never activated; stale runbooks referencing decommissioned devices.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/58c60038fd6552a2. Report an issue: GitHub.