Back to Overview

HTTP Proxy Configuration

Route Tymeslot's outbound HTTP traffic through a corporate proxy or firewall.

Luka Breitig, Software Engineer & AI Developer
Luka Breitig

Aktualizováno 2. března 2026

Before You Begin

You will need:

  • A running Tymeslot instance deployed inside a corporate network
  • The hostname, port, and (if required) credentials for your corporate proxy
  • Access to your Tymeslot instance's environment variables

By the end of this guide, Tymeslot's outbound HTTP and HTTPS requests will go through your corporate proxy.

When You Need This

This guide is for corporate or restricted networks where policy blocks servers from reaching the internet directly. Most self-hosted deployments on a home server, VPS or cloud VM do not need a proxy; if your server can reach the internet directly, skip this guide.

Tymeslot makes outbound connections to the following external services. If one is unreachable, the feature that depends on it fails, silently or with a connection error:

  • Google OAuth endpoints (login and token refresh)
  • Google Calendar and Google Meet APIs
  • Microsoft OAuth and Microsoft Graph API
  • GitHub OAuth (if GitHub login is enabled)
  • CalDAV servers, Zoom, Telegram and outgoing webhooks
  • Google reCAPTCHA verification endpoint

1 Configure the Proxy

Set the proxy with environment variables. Tymeslot reads both uppercase and lowercase names; if both are set, uppercase wins:

# HTTPS proxy: outbound API calls (OAuth, calendars, video, reCAPTCHA)
HTTPS_PROXY=http://proxy.corp.example.com:3128

# HTTP proxy: plain-HTTP requests (rare, but some networks need it)
HTTP_PROXY=http://proxy.corp.example.com:3128

# Bypass list: hosts that must not go through the proxy
NO_PROXY=localhost,127.0.0.1,::1

Tymeslot reads these variables only at startup, so restart it after setting them. On boot, the log line HTTP/HTTPS proxy configured for outbound requests lists the proxies and bypass list it picked up. Email is not sent through the proxy: SMTP and the email API providers (Postmark, SendGrid, Mailgun, AhaSend) connect directly, so your firewall must let Tymeslot reach your mail provider.

2 Authenticated Proxy

If your proxy requires credentials, put them in the proxy URL using standard URL syntax:

HTTPS_PROXY=http://username:password@proxy.corp.example.com:3128

URL-encode any special characters in the password. For example, a password containing @ must be written as %40.

Credential Exposure Risk

Tymeslot masks the password in its own logs, but anyone who can inspect the container (docker inspect) can read environment variables. Use a dedicated service account with a long random password and rotate it regularly. If your proxy supports IP-based authentication, prefer it: then the URL needs no credentials at all.

3 Configure the Bypass List

NO_PROXY is a comma-separated list of hosts that bypass the proxy. It accepts these patterns, plus a lone * to bypass the proxy for every host:

internal.example.com

Exact hostname match

Only this specific hostname bypasses the proxy. Subdomains do not match.

*.internal.example.com

Wildcard subdomain match

internal.example.com and any of its subdomains bypass the proxy.

10.0.0.0/8

CIDR IP range

Any IP address in this range bypasses the proxy. It matches URLs that use an IP address; a hostname is not resolved to check it.

An example combining all three:

NO_PROXY=localhost,127.0.0.1,::1,10.0.0.0/8,192.168.0.0/16,*.internal.example.com

Always Include Localhost and Loopback Addresses

Always include localhost, 127.0.0.1, and ::1 in NO_PROXY. Without them, a request to a service on the same machine, such as a CalDAV or video server on localhost, is sent to the proxy, which cannot reach your server's loopback interface.

TLS-Inspecting Proxies (MITM Proxies)

Some corporate proxies inspect TLS: they terminate the HTTPS connection, inspect the traffic, then open a new TLS connection to the destination and present a certificate signed by their own CA. If your proxy does this, Tymeslot rejects every HTTPS connection, because it does not trust that CA.

The symptom is certificate verification errors in the Tymeslot logs even though the proxy URL is correct. Tymeslot trusts the system CA bundle at /etc/ssl/certs/ca-certificates.crt and ignores SSL_CERT_FILE, so add your corporate CA to that bundle and mount the result over it:

# Copy the image's CA bundle and append your corporate CA (PEM format)
docker cp tymeslot:/etc/ssl/certs/ca-certificates.crt ./ca-bundle.crt
cat corporate-ca.crt >> ca-bundle.crt

# docker-compose.yml snippet
services:
  tymeslot:
    volumes:
      - ./ca-bundle.crt:/etc/ssl/certs/ca-certificates.crt:ro

Your network or security team can provide the CA certificate, usually as a .crt or .pem file. The mounted bundle replaces the image's own, so rebuild it after image updates to keep the public CAs current.

Testing Proxy Connectivity

Before restarting Tymeslot with the new proxy settings, check that the proxy accepts connections from your Docker network. The Tymeslot image does not include curl, so run it in a throwaway container on the network the bundled Compose file creates:

docker run --rm --network tymeslot_network curlimages/curl \
  -sv -x http://proxy.corp.example.com:3128 https://www.google.com 2>&1 | head -30

Expected result: the output includes CONNECT www.google.com:443 followed by HTTP/1.1 200 Connection established and then Google's own response (a 200 or a redirect). That confirms the proxy tunnel is open and HTTPS traffic flows through it.

Then check a real Tymeslot flow: restart the application with the proxy variables set and connect a Google or Outlook calendar. If the connection completes and the calendar's events appear, Tymeslot is reaching the provider's API through the proxy.

Troubleshooting

curl reports "CONNECT tunnel failed" or connection refused

The proxy is blocking the outbound connection. Ask your network team to allow outbound HTTPS on port 443 to the API domains Tymeslot uses, such as www.googleapis.com, oauth2.googleapis.com, login.microsoftonline.com and graph.microsoft.com. Some proxies need an allowlist entry for each destination domain.

Integrations on your own network fail after setting the proxy

Check that NO_PROXY includes localhost, 127.0.0.1 and the hostnames or IP ranges of your internal CalDAV, Nextcloud or MiroTalk servers. Without them, those requests go to the proxy, which usually cannot reach internal hosts.

SSL certificate verification errors in logs despite a working proxy

Your proxy inspects TLS. Follow the "TLS-Inspecting Proxies" section above to add your corporate CA to the container's trusted bundle.

Proxy authentication fails with valid credentials

Special characters in the password must be URL-encoded in the proxy URL. For example, @ becomes %40, # becomes %23, and % itself becomes %25.

❓ Frequently Asked Questions

Does Tymeslot use uppercase or lowercase variable names?

Tymeslot reads both. It checks uppercase first (HTTPS_PROXY, HTTP_PROXY, NO_PROXY) and falls back to lowercase (https_proxy, http_proxy, no_proxy) if the uppercase form is absent. Use uppercase: it is the usual form, and other tools differ in which casing they honour.

Do I need to set both HTTP_PROXY and HTTPS_PROXY?

In practice, HTTPS_PROXY is the only one you must set, because nearly all of Tymeslot's outbound API calls (Google, Microsoft, GitHub, Zoom, reCAPTCHA) use HTTPS. Set HTTP_PROXY as well if any integration you connect uses a plain http:// URL, such as a CalDAV server outside your network. Most deployments work with HTTPS_PROXY alone.

What should I put in NO_PROXY?

At minimum: localhost,127.0.0.1,::1, so requests to services on the same machine never go to the proxy.

Then add the hostnames of internal services Tymeslot calls over HTTP, such as a CalDAV or Nextcloud server (for example nextcloud or *.internal.example.com), and any private CIDR ranges you reach by IP address. The database connection never uses the proxy, so it needs no entry. A typical value looks like: localhost,127.0.0.1,::1,nextcloud,10.0.0.0/8,192.168.0.0/16

Does proxy configuration affect WebSocket connections from browsers to Tymeslot?

No. The proxy variables control only outbound HTTP requests that Tymeslot's server makes to other services, such as Google, Microsoft and GitHub. WebSocket connections that browsers open to Tymeslot are inbound and are handled by your reverse proxy (Nginx, Caddy, Traefik and so on), not by these variables.

How do I verify that outbound requests are actually going through the proxy?

Run the curl test from the "Testing Proxy Connectivity" section above. A CONNECT line in the verbose output confirms the request tunnelled through the proxy.

Inside Tymeslot, check the startup log for HTTP/HTTPS proxy configured for outbound requests , which lists the proxies and bypass list in effect. If it says Not configured instead, the variables did not reach the application. Production builds log at info level, so individual requests do not log which proxy they used.

Verification Checklist

Confirm each item before considering the proxy configuration complete:
  • HTTPS_PROXY is set to your corporate proxy URL
  • NO_PROXY includes localhost, 127.0.0.1, and ::1
  • The curl test returns 200 Connection established followed by Google's response
  • If using a TLS-inspecting proxy: corporate CA certificate mounted and trusted inside the container
  • Tymeslot restarted after the variable changes, and its startup log shows the proxy configuration
  • A Google or Outlook calendar connects and shows its events

🔗 Related Articles

Read Docker Self-Hosting

Docker Self-Hosting

Deploy Tymeslot with Docker Compose on any VPS or home server. Includes reverse proxy setup, file upload volumes, and WebSocket configuration for LiveView.

Read Cloudron Deployment

Cloudron Deployment

Install Tymeslot on Cloudron in minutes. PostgreSQL, SSL certificates, email relay, and automatic updates are all provisioned and managed for you.

Read Railway Deployment

Railway Deployment

Deploy Tymeslot to Railway with one click. PostgreSQL is provisioned and connected for you; add a signing secret and your email settings and your instance is live.