Skip to content

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

Description

@void1042

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();

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions