influxdata / influxdata/influxdb
InfluxDB 3 Explorer plugin library fails behind HTTP proxy due to missing CONNECT tunnel
- 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
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