Spring Boot on main domain name and other applications on sub-domains Nginx

For several days I’ve had a configuration problem with Nginx that I can’t solve.
I’m a beginner, and I’d just like to run my Spring Boot application on the main domain name, and run simple applications (to test, initially simple HTML pages) on sub-domains (of the same domain name).

Preliminary remark:

  • I’ve built my API with Spring Boot, which uses a TomCat web server. Spring Boot APIs run on port 8080 by default.
    A Spring Boot application can therefore run without Nginx

  • So I don’t have any configuration for my API, which is accessible via the main domain name (which does point to the VPS server’s IP address), which is:
    http://musicstoreapi.com:8080/api/products.

What I want to do:

What’s happening now ? What’s the problem ?

Diagram of my configuration problem:

In case I’ve expressed myself badly, I thought I’d draw a diagram so that you can clearly understand the problem, i.e. what I’m getting versus what I’m supposed to be getting:


Configuration & files

1. DNS

Here’s a screenshot of the DNS configuration for my domain name:

Name : musicstoreapi.com
Type : A
Value : IP VPS

Name : www. musicstoreapi.com
Type : A
Value : IP VPS

Name : api1. musicstoreapi.com
Type : CNAME
Value: musicstoreapi.com

Name : api2. musicstoreapi.com
Type : CNAME
Value: musicstoreapi.com

Name : api3. musicstoreapi.com
Type : CNAME
Value: musicstoreapi.com

2. Jar file (for my Spring Boot Application)

-----@-------: /etc/nginx/sites-enabled# cd /home/applications
-----@-------: /home/applications# ls
spring-boot-ecommerce-0.0.1-SNAPSHOT.jar

Precision:The name of the .jar file appears in red, but it seems to run correctly.

3. Service

To ensure that my Spring Boot application is accessible without interruption, I’ve created a service that appears to be active:

 spring-boot-ecommerce.service - Spring Boot Ecommerce Application
     Loaded: loaded (/etc/systemd/system/spring-boot-ecommerce.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2024-02-09 14:13:52 UTC; 2min 16s ago
   Main PID: 476505 (java)
      Tasks: 40 (limit: 19140)
     Memory: 330.0M
        CPU: 19.428s
     CGroup: /system.slice/spring-boot-ecommerce.service
             └─476505 /usr/bin/java -jar /home/applications/spring-boot-ecommerce-0.0.1-SNAPSHOT.jar

Feb 09 14:13:55 --------- java[476505]: 2024-02-09T14:13:55.389Z  INFO 476505 --- [           main] org.hibernate.Version                    : HHH000412: Hibernate ORM core version 6.2.13.Final
Feb 09 14:13:55 --------- java[476505]: 2024-02-09T14:13:55.392Z  INFO 476505 --- [           main] org.hibernate.cfg.Environment            : HHH000406: Using bytecode reflection optimizer
Feb 09 14:13:55 --------- java[476505]: 2024-02-09T14:13:55.756Z  INFO 476505 --- [           main] o.s.o.j.p.SpringPersistenceUnitInfo      : No LoadTimeWeaver setup: ignoring JPA class transformer
Feb 09 14:13:55 --------- java[476505]: 2024-02-09T14:13:55.825Z  WARN 476505 --- [           main] org.hibernate.orm.deprecation            : HHH90000025: MySQL8Dialect does not need to be specified explicitly >
Feb 09 14:13:55 --------- java[476505]: 2024-02-09T14:13:55.826Z  WARN 476505 --- [           main] org.hibernate.orm.deprecation            : HHH90000026: MySQL8Dialect has been deprecated; use org.hibernate.di>
Feb 09 14:13:56 --------- java[476505]: 2024-02-09T14:13:56.866Z  INFO 476505 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000489: No JTA platform available (set 'hibernate.transaction.jta>
Feb 09 14:13:56 --------- java[476505]: 2024-02-09T14:13:56.869Z  INFO 476505 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
Feb 09 14:13:57 --------- java[476505]: 2024-02-09T14:13:57.316Z  WARN 476505 --- [           main] JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database q>
Feb 09 14:13:58 --------- java[476505]: 2024-02-09T14:13:58.406Z  INFO 476505 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
Feb 09 14:13:58 --------- java[476505]: 2024-02-09T14:13:58.426Z  INFO 476505 --- [           main] c.l.e.SpringBootEcommerceApplication     : Started SpringBootEcommerceApplication in 5.779 seconds (process run>

4. UFW Status

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere                  
80/tcp                     ALLOW       Anywhere                  
443                        ALLOW       Anywhere                  
8433:8443/tcp              ALLOW       Anywhere                  
3306                       ALLOW       Anywhere                  
8080                       ALLOW       Anywhere                  
88                         ALLOW       Anywhere                  
81                         ALLOW       Anywhere                  
22/tcp (v6)                ALLOW       Anywhere (v6)             
80/tcp (v6)                ALLOW       Anywhere (v6)             
443 (v6)                   ALLOW       Anywhere (v6)             
8433:8443/tcp (v6)         ALLOW       Anywhere (v6)             
3306 (v6)                  ALLOW       Anywhere (v6)             
8080 (v6)                  ALLOW       Anywhere (v6)             
88 (v6)                    ALLOW       Anywhere (v6)             
81 (v6)                    ALLOW       Anywhere (v6)

5. Nginx Configuration File

server {
    listen 80;
    listen [::]:80;
    server_name api1.musicstoreapi.com;
    root /var/www/api1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
    listen 80;
    listen [::]:80;
    server_name www.api1.musicstoreapi.com;
    root /var/www/api1;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}

server {
        listen 80;
        listen [::]:80;
        server_name www.api2.musicstoreapi.com;
        root /var/www/api2;
        index index.html;

        location / {
        try_files $uri $uri/ =404;
    }
}
server {
        listen 80;
        listen [::]:80;
        server_name api2.musicstoreapi.com;
        root /var/www/api2;
        index index.html;


    location / {
        try_files $uri $uri/ =404;
    }
}

6. Symbolic link

In the /etc/nginx/sites-enabled folder, the symbolic link to the configuration file (which is in /etc/nginx/sites-available/musicstoreapi.com) has been made:

-----@-------:/etc/nginx/sites-enabled# cd /etc/nginx/sites-enabled
-----@-------:/etc/nginx/sites-enabled# ls -alh
total 12K
drwxr-xr-x  2 root root 4.0K Jan 27 16:30 .
drwx------ 12 root root 4.0K Feb  9 14:28 ..
-rw-r--r--  1 root root  192 Nov 17  2022 default.conf
lrwxrwxrwx  1 root root   44 Jan 27 16:30 musicstoreapi.com -> /etc/nginx/sites-available/musicstoreapi.com

7. Directory and file permissions

(Same for api2 and api3)

-----@-------:/var/www/api1# ls -ld /var/www/api1
drwxrwxr-x 2 root root 4096 Feb  9 15:19 /var/www/api1

I hope all these clarifications will help me find the problem. I’ve been using chatGPT but it’s going round in circles and I’ve already done everything it suggested.