Search code examples
nginxdockerspring-bootreverse-proxyproxypass

Spring Boot and Nginx integration


In my project, web app is developed using Spring boot with default tomcat server. I am using NGINX as load-balancer and have configured my spring-boot-web-app in NGINX configuration as follows:

location /spring-boot-web-app {
     proxy_pass http://spring-boot-web-app/
}

http {
    upstream /spring-boot-web-app {
        server <IP_of_spring_boot_app>:<Port_of_spring_boot_app>
    }
}

Now lets say NGINX IP and port as nginx_ip and nginx_port respectively. Also working URL for my web app as: http://web_app_ip:web_app_port/rest/echo/hi

The above URL works fine. But when i try to hit same URI via NGINX it throws 404. URL used via NGINX as: http://nginx_ip:nginx_port/spring-boot-web-app/rest/echo/hi

Is there something i am missing?


Solution

  • This works for me. Can you try this?

    1. Running tomcat

      docker run -d -p 8080:8080 --name=tomcat tomcat:8 
      
    2. Running nginx

      docker run -d -p 80:80 --link tomcat:tomcat --name=nginx nginx
      
    3. Go inside nginx container and update the conf

      docker exec -it nginx bash
      

      /etc/nginx/nginx.conf:

      server {
         listen 80 default_server;
        server_name subdomain.domain.com;
        location / {
            proxy_pass http://tomcat:8080;
            proxy_set_header Host      $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
      }
      
    4. Restart nginx service

      nginx -s reload
      
    5. Access the tomcat through nginx from host browser. You may need to add entry to /etc/hosts

      http://subdomain.domain.com
      

    Complete nginx conf: nginx.conf