docs/published/handbook/engineering/setup-ssl-locally.md
Setting up HTTPS locally can be useful if you're trying to debug hard to replicate issues (e.g cross domain cookies, etc).
There are two ways you can get HTTPS locally:
The easiest option is to use ngrok.
Sign up for an ngrok account (or sign in with GitHub) and run ngrok authtoken <TOKEN>
Find your ngrok config file location:
ngrok config check --log=stdout
On macOS, this will show ~/Library/Application Support/ngrok/ngrok.yml (XDG location). The legacy location ~/.ngrok2/ngrok.yml is deprecated.
authtoken: <TOKEN>:tunnels:
django:
proto: http
addr: 8000
webpack:
proto: http
addr: 8234
ngrok start --all
JS_URL environment variable. Then, start webpack:export WEBPACK_HOT_RELOAD_HOST=0.0.0.0
export LOCAL_HTTPS=1
export JS_URL=https://68f83839843a.ngrok-free.dev
pnpm start
JS_URL again and start the Django serverexport DEBUG=1
export LOCAL_HTTPS=1
export JS_URL=https://68f83839843a.ngrok-free.dev
python manage.py runserver
Tips & Tricks
If you're testing the Toolbar, make sure to add the ngrok urls to the list on the 'Project Settings' page.
Also, watch out, network requests can be slow through ngrok:
In case brew install openssl and brew link openssl don't work well, use
/usr/local/opt/openssl/bin/openssl instead of openssl in the next step.
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes \
-keyout localhost.key -out localhost.crt -subj "/CN=secure.posthog.dev" \
-addext "subjectAltName=DNS:secure.posthog.dev,IP:10.0.0.1"
sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain localhost.crt
secure.posthog.dev to /etc/hosts127.0.0.1 secure.posthog.dev
brew install nginx) and add the following config in /usr/local/etc/nginx/nginx.conf upstream backend {
server 127.0.0.1:8000;
}
server {
server_name secure.posthog.dev;
rewrite ^(.*) https://secure.posthog.dev$1 permanent;
}
server {
listen 443 ssl;
server_name secure.posthog.dev;
ssl_certificate /path/to/your/certs/localhost.crt;
ssl_certificate_key /path/to/your/certs/localhost.key;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://backend;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static/ {
proxy_pass http://127.0.0.1:8234/static/;
}
}
nginx -p /usr/local/etc/nginx/ -c /usr/local/etc/nginx/nginx.conf
nginx -p /usr/local/etc/nginx/ -c /usr/local/etc/nginx/nginx.conf -s stop
bin/hogli start