nginx reload is graceful; restart drops connections

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.