Censorship-resistant podcast. Bookmark our alternative access methods in case this domain goes down.

Revolution Now

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:

Diagnose
# 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) or 0.0.0.0 (direct)
  • Port conflict — another service is using the same port
TLS certificate errors

Clients refuse to connect with SSL/TLS errors:

Fix
# 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 / sync commands.
Sync between relays (strfry)
# 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:

Check your nginx config includes these critical headers
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:

Manage database size
# 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 = 90
NIP-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.nostr on 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:

Check and adjust rate limits
# 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 plugin
Events from specific pubkeys being rejected

If you're running a whitelisted relay:

Debug
# 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