40

If I already have a bunch of virtualhosts, how can I create a virtual host to handle requests that don't match any of the virtualhosts? (i.e. access by IP, another domain linking to IP, .etc .etc)

51

server_name _; and default_server on the listen configuration are what you are looking for.

Example:

server {

   listen 80 default_server;
   server_name _;

   root /var/www/default; (or wherever)    

}
  • 1
    And for the https case: listen 443 ssl default_server; – James T Snell Sep 15 '15 at 16:34
  • When I enable this, my owncloud 9 won't respond. Why? Owncloud VHOST has a server_name and is no default_server. – Corni Jul 16 '16 at 7:56
  • I don't use 80 only 443 is open. – Corni Jul 16 '16 at 8:06
  • If I add this, my other config snippets in /etc/nginx/sites-enabled/ are ignored. all domains go to /var/www/default in this case. How do I have to order the snippets? – rubo77 Aug 11 '18 at 14:57
  • I can create a vhos to postgresql connections? – Erlon Charles Sep 14 '18 at 14:35
4

If you use SSL, then you need some extra plumbing for a default_server - certificate and key (that can be self-signed).

server {
    server_name _;
    listen 80 default_server;
    listen 443 ssl default_server;
    ssl_certificate <path to cert>;
    ssl_certificate_key <path to key>;
    return 404; # or whatever
}

Nginx will try to accept SSL connection on an IP/port-matching default_server. If such server is missing cert/key, nginx will drop the connection. It won't try other servers. So don't forget cert/key.

  • Important note about the SSL certificate! If the certificate is missing, the whole nginx server will not run (even though nginx -t says "ok") – Philipp Mar 11 at 22:20
3
server {
  listen 80 default_server;
  listen 443 ssl default_server;
  listen [::]:80 default_server;
  listen [::]:443 ssl default_server;

  server_name _;
  root /path/to/default;
}

The entries are for port 80 (HTTP), port 443 (HTTPS), port 80 IPv6, and port 443 IPv6, respectively.

You could consider adding log_not_found off; to avoid adding a log entry for the page not being found.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.