"IP_RANGES_FETCH_ENABLED=false" does not disable periodic IP range fetches

Author: void1042Created Jul 29, 2026Updated Sep 17, 2026
Labelsbug

Checklist

  • Have you pulled and found the error with jc21/nginx-proxy-manager:latest docker image?
    • Yes
  • Are you sure you're not using someone else's docker image?
    • Yes
  • Have you searched for similar issues (both open and closed)?
    • Yes

Describe the bug Setting IP_RANGES_FETCH_ENABLED to false prevents the initial IP-range fetch, but it does not prevent subsequent periodic fetches.

At startup, NPM correctly reports that fetching is disabled. However, it still initializes the IP Ranges Renewal Timer. Six hours later, it attempts to fetch the CloudFront and Cloudflare IP-range data.

Nginx Proxy Manager Version v2.15.1

To Reproduce

  1. Configure NPM with:
environment:
      IP_RANGES_FETCH_ENABLED: 'false'
  1. Start the container.
  2. Check startup log:
app-1  | [7/25/2026] [9:40:38 PM] [Global   ] › ℹ  info      IP Ranges fetch is disabled by environment variable
app-1  | [7/25/2026] [9:40:38 PM] [IP Ranges] › ℹ  info      IP Ranges Renewal Timer initialized
  1. Leave the container running for six hours.
  2. It nevertheless attempts an IP-range fetch:
app-1  | [7/26/2026] [3:40:38 AM] [IP Ranges] › ℹ  info      Fetching IP Ranges from online services...
app-1  | [7/26/2026] [3:40:38 AM] [IP Ranges] › ℹ  info      Fetching https://ip-ranges.amazonaws.com/ip-ranges.json
app-1  | [7/26/2026] [3:42:53 AM] [IP Ranges] › ✖  fatal (blocked by my firewall)

Expected behavior When IP_RANGES_FETCH_ENABLED=false, NPM should neither perform the initial fetch nor initialize the periodic IP-range renewal timer. No IP-range fetches should occur for the lifetime of the process.

Operating System

  • Ubuntu 26.04 LTS, x86_64
  • Linux kernel 7.0.0-28-generic
  • Docker Engine 29.6.2
  • Docker Compose stack managed through "Komodo"

Additional context ChatGPT 5.6 Sol root-cause analysis:

The apparent cause is in backend/index.js. The environment variable controls the initial call to internalIpRanges.fetch(), but internalIpRanges.initTimer() is subsequently called unconditionally:

  if (!IP_RANGES_FETCH_ENABLED) {
      logger.info("IP Ranges fetch is disabled by environment variable");
      return;
  }

  // ...

  internalCertificate.initTimer();
  internalIpRanges.initTimer();

Source: NginxProxyManager/nginx-proxy-manager