Unlike Linux systems with systemd or init.d, macOS uses launchd for managing services. Here's how to properly control Nginx:
# Check Nginx status
ps aux | grep nginx
# Verify configuration before restart
sudo nginx -t
The most straightforward way to restart Nginx:
# Graceful restart (reloads config without dropping connections)
sudo nginx -s reload
# Full restart (terminates and starts fresh)
sudo nginx -s stop && sudo nginx
For installed Nginx as a launchd service (recommended for production):
# Load the plist (first-time setup)
sudo launchctl load /Library/LaunchDaemons/org.nginx.nginx.plist
# Standard restart procedure
sudo launchctl unload /Library/LaunchDaemons/org.nginx.nginx.plist
sudo launchctl load /Library/LaunchDaemons/org.nginx.nginx.plist
When restart fails, check these:
# Check error logs
tail -n 50 /usr/local/var/log/nginx/error.log
# Verify port conflicts
sudo lsof -i :80
sudo lsof -i :443
Create a restart script for convenience:
#!/bin/bash
echo "Validating Nginx config..."
sudo nginx -t || exit 1
echo "Performing graceful restart..."
sudo nginx -s reload
if [ $? -eq 0 ]; then
echo "Nginx restarted successfully"
else
echo "Full restart required"
sudo nginx -s stop
sudo nginx
fi
Verify the restart was successful:
# Check running processes
ps aux | grep nginx | grep -v grep
# Verify worker processes
sudo nginx -V 2>&1 | grep worker_processes
# Test HTTP response
curl -I http://localhost
When working with Nginx on macOS, it's crucial to understand how the process management differs from Linux systems. macOS uses launchd as its init system, but Nginx typically runs as a standalone daemon.
# Check if Nginx is running
ps aux | grep nginx
The most straightforward way to restart Nginx:
# Graceful restart (reloads configuration without dropping connections)
sudo nginx -s reload
# Full restart (terminates and starts fresh)
sudo nginx -s stop && sudo nginx
On macOS, you might encounter permission-related problems:
# If you get permission errors, try:
sudo chown -R $(whoami) /usr/local/etc/nginx/
sudo chmod -R 755 /usr/local/etc/nginx/
If you installed via Homebrew:
# For brew-installed Nginx
brew services restart nginx
# Alternative brew method
sudo brew services restart nginx
When restart fails, check the error log:
# View error logs in real-time
tail -f /usr/local/var/log/nginx/error.log
# Test configuration before restart
sudo nginx -t
Add this to your shell configuration (.zshrc or .bash_profile):
alias nginx-restart="sudo nginx -s stop && sudo nginx"
alias nginx-reload="sudo nginx -s reload"
alias nginx-test="sudo nginx -t"
For production systems, consider creating a launchd plist:
Label
nginx
ProgramArguments
/usr/local/bin/nginx
RunAtLoad
KeepAlive