Skip to main content

Nginx Commands

Introduction

Nginx (pronounced "engine-x") is a powerful, high-performance web server and reverse proxy that has gained immense popularity due to its efficiency and scalability. Whether you're deploying a simple website or managing complex microservices, understanding Nginx commands is essential for effective server management.

This guide covers the most important Nginx commands you'll need to know for day-to-day operations, configuration management, and troubleshooting. By the end, you'll be comfortable controlling Nginx from the command line and have a solid foundation for advanced server management.

Basic Nginx Commands

Starting and Stopping Nginx

The most fundamental commands allow you to control the Nginx service:

bash
# Start Nginx
sudo nginx

# Stop Nginx immediately
sudo nginx -s stop

# Stop Nginx gracefully (wait for workers to finish processing)
sudo nginx -s quit

# Reload configuration without stopping service
sudo nginx -s reload

# Reopen log files
sudo nginx -s reopen

The -s flag stands for "signal" and allows you to send various control commands to the Nginx master process.

Checking Nginx Status

Before making changes, it's often useful to check the current status of your Nginx installation:

bash
# Check if Nginx is running
sudo systemctl status nginx

# Alternative method on non-systemd systems
ps aux | grep nginx

Output example:

● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-03-11 07:15:22 UTC; 3 days ago
Docs: man:nginx(8)
Process: 1234 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s reload (code=exited, status=0/SUCCESS)
Main PID: 5678 (nginx)
Tasks: 3 (limit: 4915)
Memory: 3.5M
CGroup: /system.slice/nginx.service
├─5678 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
├─5679 nginx: worker process
└─5680 nginx: worker process

Configuration Commands

Testing Configuration Files

Before applying configuration changes, you should test them to prevent errors that might take down your server:

bash
# Test the syntax of your configuration files
sudo nginx -t

# Test with a specific configuration file
sudo nginx -t -c /path/to/nginx.conf

A successful test outputs:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Showing Configuration Details

To see what configuration Nginx is currently using:

bash
# Show compilation-time options
nginx -V

# Get all running configuration
sudo nginx -T

The -V flag output shows build information:

nginx version: nginx/1.24.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx ...

Debugging and Troubleshooting Commands

Checking for Running Nginx Processes

If you're unsure whether Nginx is running or need to see its processes:

bash
# Find all Nginx processes
ps aux | grep nginx

# Check which ports Nginx is listening on
sudo netstat -tulpn | grep nginx

Example output:

tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5678/nginx: master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 5678/nginx: master

Viewing Logs

Logs are crucial for troubleshooting Nginx issues:

bash
# View access logs
sudo tail -f /var/log/nginx/access.log

# View error logs
sudo tail -f /var/log/nginx/error.log

Process Control Commands

Handling Nginx Processes

For more fine-grained control over Nginx processes:

bash
# Get the master process ID
cat /var/run/nginx.pid

# Send custom signals to Nginx
sudo kill -s SIGNAL $(cat /var/run/nginx.pid)

Common signals include:

  • HUP: Reload configuration, start new worker processes
  • TERM: Shut down gracefully
  • USR1: Reopen log files
  • USR2: Upgrade executable on the fly
  • WINCH: Gracefully shut down worker processes

Practical Examples

Example 1: Safe Configuration Updates

When updating your Nginx configuration, follow this safe procedure:

bash
# Edit the configuration file
sudo nano /etc/nginx/nginx.conf

# Test the new configuration
sudo nginx -t

# If test is successful, reload Nginx
sudo nginx -s reload

Example 2: Upgrading Nginx Without Downtime

This process allows you to upgrade Nginx while keeping your site online:

bash
# Install the new version but don't restart
sudo apt-get install nginx-core

# Get the current Nginx PID
old_pid=$(cat /var/run/nginx.pid)

# Upgrade the binary on the fly
sudo kill -USR2 $old_pid

# Gracefully shut down old worker processes
sudo kill -WINCH $old_pid

Example 3: Debugging a Failed Start

If Nginx fails to start, use these commands to troubleshoot:

bash
# Check for syntax errors
sudo nginx -t

# Look for specific errors in logs
sudo tail -n 50 /var/log/nginx/error.log

# Check if something else is using Nginx's ports
sudo netstat -tulpn | grep ':80'

The Nginx Command Structure

Let's visualize the basic command structure:

This diagram shows how Nginx commands branch into three main categories: basic actions, signals, and configuration options.

Summary

Understanding Nginx commands is essential for effective web server management. We've covered:

  • Basic service control (start, stop, reload)
  • Configuration testing and validation
  • Troubleshooting techniques
  • Process management
  • Practical examples for common scenarios

With these commands in your toolkit, you'll be able to manage Nginx servers with confidence, whether for development or production environments.

Additional Resources

To deepen your Nginx knowledge:

Exercises

  1. Basic Control: Install Nginx, then practice starting, stopping, and reloading it.
  2. Configuration Test: Intentionally make a syntax error in your configuration file, then use the test command to find it.
  3. Log Analysis: Create a simple website, generate some traffic, and analyze the resulting access logs.
  4. Custom Configuration: Create a new server block for a test domain and reload Nginx to apply it.
  5. Zero-Downtime Practice: Set up a test environment and practice upgrading Nginx without service interruption.


If you spot any mistakes on this website, please let me know at feedback@compilenrun.com. I’d greatly appreciate your feedback! :)