@lwvmobile Sorry for the necroposting and late reply, I had similar issue (magicmirror behind http/socks proxy) and couldn’t find any solutions, so with the help of AI I found the issue why tsocks, http_proxy etc env vars don’t work.
The problem is that MagicMirror overrides the global network layer inside this block using its own new Agent({ connect: { rejectUnauthorized: false } }) constructor whenever self-signed certificates or custom configurations are evaluated [index.js]. This instantly deletes your global proxy settings.
To fix this, merge your proxy dispatcher into MagicMirror’s option generation scheme so it is safely preserved.
Fix that worked for me:
Modify your getRequestOptions() block in /path/to/your/MagicMirror/js/http_fetcher.js to look exactly like this:
getRequestOptions () {
const headers = {
"User-Agent": getUserAgent(),
...this.customHeaders
};
// 1. Initialize the ProxyAgent using undici
const { ProxyAgent } = require("undici");
const proxyDispatcher = new ProxyAgent({ uri: "http://192.168.1.1:1080" });
// 2. Set the default dispatcher to use your proxy
const options = {
headers,
dispatcher: proxyDispatcher
};
if (this.selfSignedCert) {
// 3. Merge the proxy configuration if self-signed cert handling is active
options.dispatcher = new ProxyAgent({
uri: "http://192.168.1.1:1080",
connect: {
rejectUnauthorized: false
}
});
}
if (this.auth) {
if (this.auth.method === "bearer") {
headers.Authorization = `Bearer ${this.auth.pass}`;
} else {
headers.Authorization = `Basic ${Buffer.from(`${this.auth.user}:${this.auth.pass}`).toString("base64")}`;
}
}
return options;
}
IMPORTANT: Modify proxy url to the one you use, instead of “http://192.168.1.1:1080”
It intercepts the raw options configuration object right before MagicMirror wraps it.
If this.selfSignedCert evaluates to true, it swaps out MagicMirror’s isolated base Agent with a ProxyAgent block that handles both the proxy routing and the SSL bypass rules simultaneously [index.js].