Make one server a default locked server and let another server block one true server_name .
server { listen 80 default_server; listen 443 ssl default_server; ssl_certificate ...; ssl_certificate_key ...; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name www.example.com; ssl_certificate ...; ssl_certificate_key ...; ... }
The default server for https requires a valid certificate. Assuming you have a wildcard certificate, most ssl_ can be transferred to an external block and inherited from both server blocks. For example:
ssl_certificate ...; ssl_certificate_key ...; ssl_...; server { listen 80 default_server; listen 443 ssl default_server; return 301 https://www.example.com$request_uri; } server { listen 443 ssl; server_name www.example.com; ... }
See this document for more details.
Richard Smith
source share