nginx config - forward http to https, forward www.domain.tld to domain.tld and two subdomains

I'm trying to configure nginx to:

http://www.domain.tld --> https://domain.tld
http://domain.tld --> https://domain.tld
http://api.domain.tld --> https://api.domain.tld

The 'www'-webroot serves static HTML (AngularJS) and the API serves an Node.JS app that should 'upstream' from localhost:3000. I guess I'm in the right direction, however it doesn't seem to work for me. Here's what I've got so far:

upstream api_server {
    server              localhost:3000;
    keepalive           64;
}

server {
    listen 80;
    server_name         api.domain.tld;
    return 301          https://api.domain.tld$request_uri;
}

server {
    listen 80;
    server_name         *.domain.tld www.domain.tld;
    return 301          https://domain.tld$request_uri;
}

server {
    listen 443 ssl;
    server_name         api.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

location / {
    proxy_set_header    X-Real-IP $remote_addr;
    proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header    Host $http_host;
    proxy_set_header    X-NginX-Proxy true;

    proxy_pass          http://api_server/;
    proxy_redirect      off;
}

server {
    listen 443 ssl;
    server_name         *.domain.tld www.domain.tld;

    ssl_certificate     /etc/ssl/ssl_cert.crt;
    ssl_certificate_key /etc/ssl/ssl_key.key;
    ssl_protocols       SSLv3 TLSv1;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    root /var/www/webroot/;
}

Right now this is all in my /etc/nginx/conf.d/domain.tld.conf file.

Any help would be really appreciated.


EDIT:

I've figured it out myself (a bit of help from Tan Hong Tat), so the example is updated.

If you've got any improvements please do tell, I'll update it.

Redirect HTTP to HTTPS in the server block for HTTP. Remove the listen 80 in the HTTPS server block.

    server {
        listen 80;
        server_name         domain.tld www.domain.tld;
        return 301          https://domain.tld$request_uri;
    }
    server {
        listen 80;
        server_name         api.domain.tld;
        return 301          https://api.domain.tld$request_uri;
    }

    server {
        listen 443 ssl;
        server_name         domain.tld www.domain.tld api.domain.tld;

        location / {
            proxy_redirect off;
            proxy_set_header        X-Real-IP $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header        X-Forwarded-Proto $scheme;
            proxy_set_header        Host $http_host;
            proxy_set_header        X-NginX-Proxy true;
            proxy_set_header        Connection "";
            proxy_http_version      1.1;
            proxy_cache             one;
            proxy_cache_key         sfs$request_uri$scheme;
            proxy_pass              http://domain_tld_api_server;
        }
    }