На том же самом 443 порту прослушать не получится, потому придётся прослушивать на отдельном, и проксировать через nginx.
Нужно добавить отдельный блок server для поддомена (или несколько блоков), но со своими настройками и без default_server. Не старые блоки заменить, а дописать новые. Что-то вроде этого:
server {
listen [::]:80;
listen 80;
server_name api.example.com;
return 301 https://$host$request_uri;
}
server {
listen [::]:443 ssl;
listen 443 ssl;
http2 on;
server_name api.example.com;
ssl_certificate путь_к_серту_для_api.example.com;
ssl_certificate_key путь_к_ключу_для_api.example.com;
location / {
proxy_pass 127.0.0.1:порт_вашего_приложения;
........
........
}
}