NGINX Config for DevOps: Serverion’s Trick to Zero-Downtime Deployments
Zero-downtime deployments mean updating your application without interrupting service – a must for businesses where even a brief outage can cost millions. NGINX makes this possible using its master-worker process model and smart signals like USR2 (start new processes) and HUP (reload configuration). Here’s the key:
- How it works: NGINX shifts traffic from old workers to updated ones without dropping connections.
- Key steps: Use signals (
USR2,HUP, etc.), configurenginx.confproperly, and validate changes before reloading. - Techniques: Combine NGINX with methods like blue-green deployments or Docker for seamless updates.
- Health checks: Ensure only healthy servers handle traffic, using NGINX’s passive or active health checks.
With the right configuration, you can keep your services running smoothly during updates, protect revenue, and maintain customer trust.
NGINX Basics for Zero-Downtime Deployments

Zero-Downtime Deployment Explained
NGINX uses a master-worker model to handle updates without interrupting service. The master process oversees configuration and control, while worker processes manage client connections. This setup allows traffic to seamlessly shift from old workers to new ones during updates, ensuring uninterrupted service.
NGINX Connection Management
NGINX relies on specific signals to control processes during upgrades or configuration changes:
- USR2: Starts new master and worker processes.
- WINCH: Stops old worker processes gracefully.
- HUP: Reloads the configuration and replaces workers.
- QUIT: Shuts down the master and workers gracefully.
When reloading, NGINX moves the old master process ID to /run/nginx.pid.oldbin, writes the new master process ID to /run/nginx.pid, and allows old workers to complete active requests before shutting down.
Modern App Deployments: How to use NGINX and JFrog to …

Setting Up NGINX for Continuous Operation
To keep connections active during reloads, take advantage of NGINX’s master-worker architecture with the following settings.
Key NGINX Configuration Steps
Turn on multi_accept to let workers handle multiple connections per event. Here’s an example configuration for nginx.conf:
worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; multi_accept on; } http { upstream backend { server backend1.example.com:8080; server backend2.example.com:8080; keepalive 32; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } Reloading Configuration Without Downtime
- Reload the current workers to apply changes:
nginx -s reload - Check the updated master process ID:
cat /run/nginx.pid - Perform a binary upgrade without stopping traffic:
kill -USR2 $(cat /run/nginx.pid) kill -WINCH $(cat /run/nginx.pid.oldbin)
These steps allow traffic to transition smoothly between old and new workers, ensuring uninterrupted service.
sbb-itb-59e1987
Deployment Methods with NGINX
You can use NGINX to achieve zero-downtime deployments by leveraging techniques like blue-green setups or container-based approaches.
Blue-Green Deployment Setup
With NGINX, you can manage traffic between two environments – commonly referred to as blue and green. These environments are identical, but only one is active at a time. Here’s how it works:
- Deploy the updated version to the inactive environment (e.g., green).
- Run health checks to ensure the new version is functioning properly.
- Once verified, update the NGINX configuration to route traffic to the updated environment.
- Reload the configuration using the
HUPsignal to avoid dropping any active connections.
This method ensures a smooth transition without service interruptions.
Docker and NGINX Integration
Using Docker with NGINX streamlines deployments by maintaining consistent environments for both your application and proxy layers. Here’s how you can achieve zero-downtime updates:
- Launch the new container alongside the current active one.
- Perform health checks to confirm the new container is ready.
- Modify the NGINX upstream configuration to include the new container.
- Reload the configuration with the
HUPsignal, allowing the old workers to finish processing before they exit.
This approach ensures uninterrupted service while updating your application.
Testing and Verification
Configure Health Checks
NGINX health checks help ensure that only functional servers handle traffic. These checks work alongside upstream configuration and blue-green routing. NGINX offers two types of health checks: passive (available in NGINX Open Source) and active (exclusive to NGINX Plus).
For passive health checks in NGINX Open Source, set up your upstream block like this:
upstream backend { server backend1.serverion.com:8080 max_fails=3 fail_timeout=30s; server backend2.serverion.com:8080 max_fails=3 fail_timeout=30s; zone backend 64k; } If you’re using NGINX Plus, you can enable active health checks by adding the health_check directive along with a match block:
location / { proxy_pass http://backend; health_check interval=5s fails=3 passes=2 mandatory persistent; match health_check { status 200; header Content-Type = application/json; body ~ '"status":"UP"'; } } Be sure to validate these configurations before reloading NGINX.
Validate Configuration
Always test your NGINX configuration for correctness before reloading. Use the following command:
nginx -t -c /path/to/your/nginx.conf Zero-Downtime Deployment Essentials
Achieving zero-downtime deployments hinges on careful NGINX configuration and solid infrastructure planning. These elements work together to ensure updates happen without interruptions.
Here are the key factors for success:
- Process control and configuration validation: Take full advantage of NGINX’s architecture while sticking to thorough testing protocols.
- Infrastructure stability: Maintain consistent performance and keep security tight throughout the deployment process.
For details on health checks and rollback steps, check out the Testing and Verification section.
Serverion‘s platform supports these efforts with reliable stability and security. Its global data centers keep performance steady during updates, and built-in DDoS protection ensures security remains intact.
Start small by using feature toggles on noncritical services. Gradually scale up, while keeping regular testing, close monitoring, and clear rollback plans at the center of your strategy.