influxdata / influxdata/influxdb

InfluxDB 3 Explorer plugin library fails behind HTTP proxy due to missing CONNECT tunnel

Open
#27,478 0 comments 0 reactions 0 assignees View on GitHub
v3 v3-data-explorer
Dominant language
Rust
Stars
31.7k
Forks
3.7k
Avg merge
13h 37m
Merged PRs (30d)
8

Description

__Steps to reproduce:__
List the minimal actions needed to reproduce the behaviour.

1. Run InfluxDB 3 Explorer in Docker behind an HTTP proxy, for example Squid:

```bash
sudo docker run -d \
--name influxdb3-explorer \
--restart unless-stopped \
--network host \
-e HTTP_PROXY='http://company-proxy:3128' \
-e HTTPS_PROXY='http://company-proxy:3128' \
-e NO_PROXY='localhost,127.0.0.1,::1,explorer-host,explorer-host.example.org' \
-e SESSION_SECRET_KEY='' \
-v /opt/influxdb3-explorer/db:/db \
-v /opt/influxdb3-explorer/config:/app-root/config:ro \
influxdata/influxdb3-ui \
--mode=admin
```

2. Open InfluxDB 3 Explorer and navigate to the Plugin Library, or wait for the scheduled plugin-library refresh.

3. Observe Explorer logs:

```bash
sudo docker logs influxdb3-explorer --tail 200
```

4. Capture traffic to the proxy while Explorer tries to update the plugin library:

```bash
sudo tcpdump -A -s 0 -n -i any 'host and port 3128'
```

5. Explorer attempts to fetch:

```text
https://raw.githubusercontent.com/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json
```

but sends an HTTP request through the proxy in this form:

```http
GET https://raw.githubusercontent.com/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json HTTP/1.1
Accept: application/json
Accept-Encoding: identity
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
User-Agent: axios/1.13.5
host: raw.githubusercontent.com
Connection: keep-alive
```

In another tested configuration with Node proxy flags enabled, Explorer sent:

```http
GET https://raw.githubusercontent.com:3128/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json HTTP/1.1
User-Agent: axios/1.13.5
host: raw.githubusercontent.com
```

6. The proxy responds with an error or Explorer times out:

```text
HTTP/1.1 502 Bad Gateway
Server: squid/4.10
X-Squid-Error: ERR_READ_ERROR 0
```

or Explorer logs:

```text
[ExternalApiService] Error executing GET request to https://raw.githubusercontent.com/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json
timeout of 30000ms exceeded
[PluginHeaderService] Failed to update plugin library: HttpException: timeout of 30000ms exceeded
[Scheduler] HttpException: timeout of 30000ms exceeded
```

7. A manual Node test inside the same container can reach the same URL successfully when using a proper HTTPS proxy tunnel. For example, a manual CONNECT request shows:

```http
CONNECT raw.githubusercontent.com:443 HTTP/1.1
Host: raw.githubusercontent.com:443
```

and succeeds. Native Node `fetch()` / `https.get()` tests can also succeed when proxy support is configured.

__Expected behaviour:__
InfluxDB 3 Explorer should fetch the plugin library through the configured HTTP proxy successfully.

For an HTTPS target through an HTTP proxy, Explorer should establish a tunnel using:

```http
CONNECT raw.githubusercontent.com:443 HTTP/1.1
```

or otherwise use a proxy-aware HTTPS agent so that the request to `https://raw.githubusercontent.com/.../plugin_library.json` works through a standard Squid HTTP proxy.

The Plugin Library page should be populated and searchable.

__Actual behaviour:__
InfluxDB 3 Explorer fails to update/load the Plugin Library behind the HTTP proxy.

The backend logs show:

```text
[ExternalApiService] Error executing GET request to https://raw.githubusercontent.com/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json
timeout of 30000ms exceeded
[PluginHeaderService] Failed to update plugin library: HttpException: timeout of 30000ms exceeded
```

`tcpdump` shows that Explorer/Axios sends an absolute-form HTTPS request to the proxy instead of a CONNECT tunnel:

```http
GET https://raw.githubusercontent.com/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json HTTP/1.1
User-Agent: axios/1.13.5
host: raw.githubusercontent.com
```

In another tested environment-variable configuration, it incorrectly included the proxy port in the destination URL:

```http
GET https://raw.githubusercontent.com:3128/influxdata/influxdb3_plugins/refs/heads/main/influxdata/library/plugin_library.json HTTP/1.1
User-Agent: axios/1.13.5
host: raw.githubusercontent.com
```

The Squid proxy returns:

```text
HTTP/1.1 502 Bad Gateway
X-Squid-Error: ERR_READ_ERROR 0
```

or Explorer times out after 30000 ms.

This prevents Plugin Library search/use in the Explorer UI.

__Environment info:__

* InfluxDB 3 Explorer Docker image: `influxdata/influxdb3-ui`
* Explorer backend version from logs:

```text
Backend App Version: 1.8.0
```

* Node version inside container:

```text
Node.js v24.15.0
```

* Axios version observed from tcpdump User-Agent:

```text
axios/1.13.5
```

* Proxy:

```text
Squid 4.10, HTTP proxy on port 3128
```

* Container networking:

```text
--network host
```

* System info:

```text
Linux 6.8.0-111-generic x86_64
```

* Docker version:

```text
29.5.2
```

__Config:__

Explorer was started with environment variables similar to:

```bash
-e HTTP_PROXY='http://company-proxy:3128'
-e HTTPS_PROXY='http://company-proxy:3128'
-e NO_PROXY='localhost,127.0.0.1,::1,explorer-host,explorer-host.example.org'
-e SESSION_SECRET_KEY=''
-v /opt/influxdb3-explorer/db:/db
-v /opt/influxdb3-explorer/config:/app-root/config:ro
```

The same container can successfully reach the same GitHub URL using a manual Node CONNECT tunnel test, which sends:

```http
CONNECT raw.githubusercontent.com:443 HTTP/1.1
Host: raw.githubusercontent.com:443
```

This suggests the issue is specific to Explorer’s plugin-library HTTP client/proxy handling, likely Axios proxy behavior, rather than Docker networking, DNS, or the proxy being unavailable.

Additional diagnostic commands used:

```bash
sudo docker exec influxdb3-explorer node --version
```

```bash
sudo docker exec influxdb3-explorer sh -c 'tr "\0" "\n" < /proc/15/environ | grep -E "HTTP_PROXY|HTTPS_PROXY|NO_PROXY|NODE_OPTIONS|NODE_USE_ENV_PROXY"'
```

```bash
sudo tcpdump -A -s 0 -n -i any 'host and port 3128'
```

Contributor guide

Open the contributing guide

Research direction

The failing path is the plugin-library refresh through ExternalApiService and PluginHeaderService; start by locating their Axios request to the raw.githubusercontent.com URL and reviewing proxy handling. Reproduce with the supplied HTTP_PROXY/HTTPS_PROXY Docker setup and verify the request uses an HTTPS CONNECT tunnel. Done when the Plugin Library loads and remains searchable through a standard Squid proxy.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, node.js
Domain
backend, networking
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
55/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.