Spring Boot 和 Nginx 集成

Posted

技术标签:

【中文标题】Spring Boot 和 Nginx 集成【英文标题】:Spring Boot and Nginx integration 【发布时间】:2016-08-31 15:57:25 【问题描述】:

在我的项目中,Web 应用程序是使用带有默认 tomcat 服务器的 Spring boot 开发的。 我使用 nginx 作为负载平衡器,并在 NGINX 配置中配置了我的 spring-boot-web-app,如下所示:

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>
    

现在让我们将 NGINX IP 和端口分别称为 nginx_ipnginx_port。 我的网络应用程序的工作 URL 也为:http://web_app_ip:web_app_port/rest/echo/hi

上面的 URL 工作正常。但是当我尝试通过 NGINX 访问相同的 URI 时,它会抛出 404。通过 NGINX 使用的 URL 为: http://nginx_ip:nginx_port/spring-boot-web-app/rest/echo/hi

我有什么遗漏吗?

【问题讨论】:

你检查过 nginx 日志吗? 是的。即使我看到它拦截 URL 的应用程序日志。 不知何故,我觉得它更多的是与 CORS 相关的问题。我需要设置任何标题值吗? 您可能需要设置proxy_pass_reverse nginx.com/resources/wiki/start/topics/examples/likeapache, ***.com/questions/12847771/… 是 $remote_add 并且 $host 应该是我的网络应用的 IP? 【参考方案1】:

这对我有用。你可以试试这个吗?

    运行tomcat

    docker run -d -p 8080:8080 --name=tomcat tomcat:8 
    

    运行 nginx

    docker run -d -p 80:80 --link tomcat:tomcat --name=nginx nginx
    

    进入 nginx 容器并更新配置文件

    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;
      
    
    

    重启nginx服务

    nginx -s reload
    

    从主机浏览器通过 nginx 访问 tomcat。您可能需要向 /etc/hosts 添加条目

    http://subdomain.domain.com
    

完成 nginx 配置:nginx.conf

【讨论】:

非常感谢您的帮助“Gangaraju”。但是你提出的 docker 命令我不能使用。因为我正在使用 consul 来做这件事并定义依赖关系。 它可能不适合您的环境。但是尝试通过与这些步骤进行比较来调试您的问题并检查您缺少的内容。我建议你在其他环境中运行这些容器来交叉验证 nginx 配置/以便更好地理解 非常感谢 Gangaraju 的及时帮助。非常感谢!1 接受了答案,因为它提供了一些调试途径。一旦我得到它会发布解决方案。

以上是关于Spring Boot 和 Nginx 集成的主要内容,如果未能解决你的问题,请参考以下文章

Flyway 和 Spring Boot 集成

Angular集成Spring Boot,Spring Security,JWT和CORS

Spring Boot 集成MyBatis

Spring Boot集成Spring Cache 和 Redis

spring boot 和 mybatis集成

spring-boot项目的docker集成化部署