Eu não testei, mas acho que algo assim deveria funcionar
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name ~^(www\.)?(?<domain>.+)$;
return 301 https://mainwebsite.com/$domain;
return 404;
}
server {
listen 80;
listen [::]:80;
server_name 12.13.14.15;
return 404;
}
Se não, você sempre pode usar um script (aqui eu mostro com php, mas poderia ser node-js, perl, python, etc ...)
server {
listen 80 default_server;
listen [::]:80 default_server;
try_files index.php =404;
}
index.php
<?php
$domain = str_ireplace('www.', '', parse_url($_SERVER['HTTP_HOST'], PHP_URL_HOST));
if($domain == '12.13.14.15') {
http_response_code(404);
// include a 404 page?
// require('404.php');
} else {
$newURL = 'https://mainwebsite.com/'.$domain;
header('Location: '.$newURL, 301);
}
exit();