How to Set Default Server in Nginx: Simple Guide
To set a default server in Nginx, add the
default_server parameter to the listen directive inside a server block. This server will handle all requests that do not match other server blocks.Syntax
The default_server parameter is added to the listen directive inside a server block. It marks that server as the default for the specified IP and port.
Example parts:
listen 80 default_server;- listens on port 80 and sets this server as default.server_name example.com;- defines the domain this server responds to.
nginx
server {
listen 80 default_server;
server_name example.com;
# other settings
}Example
This example shows two server blocks. The first is the default server that handles all unmatched requests on port 80. The second handles requests for mywebsite.com.
nginx
server {
listen 80 default_server;
server_name _;
return 444;
}
server {
listen 80;
server_name mywebsite.com;
root /var/www/mywebsite;
index index.html;
}Output
When a request comes to port 80 that does not match 'mywebsite.com', Nginx returns a 444 (connection closed) response from the default server.
Common Pitfalls
Common mistakes include:
- Not using
default_serverin thelistendirective, so no server is set as default. - Setting multiple servers as
default_serveron the same IP and port, causing conflicts. - Using
server_name _;or wildcard incorrectly;default_serveris what controls default behavior.
nginx
server {
listen 80;
server_name _;
# This is NOT default server because 'default_server' is missing
}
server {
listen 80 default_server;
server_name _;
# Correct default server
}Quick Reference
Tips to set default server in Nginx:
- Use
listen [port] default_server;in exactly one server block per IP:port. - The default server handles requests that do not match any
server_name. - Use
server_name _;as a catch-all name if needed. - Test config with
nginx -tbefore reload.
Key Takeaways
Add 'default_server' to the listen directive to set the default server in Nginx.
Only one server block per IP:port should have 'default_server' to avoid conflicts.
The default server handles requests that don't match any server_name.
Use 'nginx -t' to check configuration syntax before reloading Nginx.
Setting 'server_name _;' is optional but common for catch-all default servers.