Nostr Troubleshooting
Common issues with Nostr relays and clients, with step-by-step solutions.
Relay won't accept WebSocket connections
If clients can't connect to your relay:
# Check if the relay process is running sudo systemctl status strfry # or your relay service name # Check if it's listening on the correct port ss -tlnp | grep 7777 # Test WebSocket locally wscat -c ws://127.0.0.1:7777 # Or: websocat ws://127.0.0.1:7777 # Test from outside (if behind nginx) wscat -c wss://relay.yourdomain.com
Common causes:
- Relay not running — check systemd status and logs
- Binding to wrong address — ensure config says
127.0.0.1(for nginx proxy) or0.0.0.0(direct) - Port conflict — another service is using the same port
TLS certificate errors
Clients refuse to connect with SSL/TLS errors:
# Check certificate expiry sudo certbot certificates # Renew if expired sudo certbot renew # Test certificate externally openssl s_client -connect relay.yourdomain.com:443 -servername relay.yourdomain.com # Check nginx TLS config sudo nginx -t # Ensure auto-renewal cron is active sudo systemctl status certbot.timer
Let's Encrypt certificates expire every 90 days. Certbot should auto-renew, but check that the renewal timer is active.
Events not propagating to other relays
You publish an event to your relay but it doesn't appear on other relays:
- This is expected behavior. Nostr relays are independent — events don't automatically replicate between relays.
- Your client must publish to multiple relays. Most clients send to all configured relays.
- For relay-to-relay syncing, some relay software supports strfry's
stream/synccommands.
# Stream events from another relay to yours strfry stream wss://relay.otherdomain.com --dir both # One-time sync strfry sync wss://relay.otherdomain.com
Nginx WebSocket proxy not working
Connection works locally but fails through nginx:
location / {
proxy_pass http://127.0.0.1:7777;
proxy_http_version 1.1;
# These two lines are REQUIRED for WebSocket
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# These prevent premature timeout
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
# Forward real IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}The most common mistake is missing the Upgrade and Connection headers. Without them, nginx treats WebSocket as a regular HTTP request and closes it.
Database growing too large
Public relays can accumulate gigabytes of events quickly:
# Check database size
du -sh /var/lib/strfry/data/
# Export events for backup
strfry export > backup.jsonl
# For strfry: configure event expiry in strfry.conf
# events {
# maxAgeDays = 90
# }
# For nostr-rs-relay: use the built-in retention policies
# In config.toml:
# [retention]
# max_age_days = 90NIP-07 extension not detected in browser
The Rev Now admin panel (or other Nostr web apps) says "No Nostr signer detected":
- Install a NIP-07 extension: Alby ↗, nos2x ↗, or nos2x-fox ↗
- Refresh the page after installing — extensions inject
window.nostron page load - Check the extension is enabled for the current site (some extensions require per-site permission)
- Brave browser users: extensions may be restricted — check
brave://extensions
Relay rejecting events with 'rate limited'
Your relay is rejecting events from certain pubkeys:
# strfry.conf rate limiting
relay {
# Increase limits if legitimate users are being blocked
writePolicy {
# Events per second per IP
maxEventsPerSec = 10
# Events per second per pubkey
maxEventsPerPubkeySec = 5
}
}
# Check logs for rate limit hits
journalctl -u strfry | grep -i "rate"
# To whitelist specific pubkeys, use a write policy pluginEvents from specific pubkeys being rejected
If you're running a whitelisted relay:
# Check if the pubkey is in your whitelist
grep "PUBKEY_HEX" /etc/strfry/write-policy.sh
# Convert npub to hex (if you have the npub but not hex)
# Use: https://nostr.com/tools
# Or with nostr-tools:
# npub1... → hex string
# Test the write policy manually
echo '{"event":{"pubkey":"HEX_PUBKEY_HERE"}}' | /etc/strfry/write-policy.sh
# Check permissions
ls -la /etc/strfry/write-policy.sh
# Must be executable: chmod +x