reload sends the master process a signal: it re-reads the configuration, starts new workers, and lets the old ones finish the requests they are serving. restart stops everything and starts it again, which is a brief outage.
nginx -t && systemctl reload nginx # no dropped requests
systemctl restart nginx # required for: changed listen ports,
# new modules, some ssl directives
Always the -t first — a reload with a broken config leaves the old workers running, which is fine, while a restart with a broken config leaves nothing running, which is not. A handful of changes genuinely need a restart, and the giveaway is that a reload appears to succeed and nothing changes. Long-lived connections such as websockets survive a reload only until the old worker is told to shut down.