Nginx部署多个spring-boot项目(jar方式部署)

本文介绍如何利用Nginx进行SpringBoot项目的多端口转发配置,实现多个项目的统一域名访问。涵盖Nginx配置示例及SpringBoot项目的context-path设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人技术网站 欢迎关注

springboot项目部署到服务器常见的方式就是打成war包部署Tomcat或者打成jar包直接使用内置容易运行,很多人现在都打成war包部署到tomcat,这种方式虽然没问题  但是后期维护比较麻烦。从官方的说明中 打成jar部署是最好的方式,但是这样又有个问题 如果同时部署多个spring-boot项目 端口不一样  怎么通过域名来访问呢,接下来就需要Nginx出手了,Nginx 是一个高性能的HTTP反向代理服务器,也是一个IMAP/POP3/SMTP服务器。很适合部署springboot,Nginx的安装这里不在做教程  给出主要nginx.conf的配置

 

server {
    listen       80;
    server_name  127.0.0.1;
    access_log logs/book.log;
    error_log logs/book.error;

    #将/wx-service请求转发给http://127.0.0.1:8011/wx-service处理
    location /wx-service {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8011/wx-service;
    }

    #将/bootdo请求转发给http://127.0.0.1:8012/bootdo处理
    location /bootdo {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8012/bootdo;
    }

    #将/xcloud-service请求转发给http://127.0.0.1:8013/xcloud-api处理
    location /xcloud-service {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8013/xcloud-api;
    }

    #将/eureka-service请求转发给http://127.0.0.1:8081/eureka-service处理
    location /eureka-service {
        proxy_pass http://127.0.0.1:8081/eureka-service; #这里的端口记得改成项目对应的哦
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
    }

    #将/xcloud-api请求转发给http://127.0.0.1:8082/xcloud-api处理
    location /xcloud-api {
        proxy_pass http://127.0.0.1:8082/xcloud-api; #这里的端口记得改成项目对应的哦
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
    }
}

将nginx的端口改成80端口 域名就可以直接访问 service_name可以为localhost 代表本机 localtion /XXX这块就是配置nginx端口转发 不输了几个项目就配置几个 也可以将tomcat中的项目配置在这 也是没问题的  根据上述配置 在sbin目录执行 ./nginx -s reload 刷新nginx配置就会生效了

在这提供一个spring-boot快速重启shell脚本 亲测有效

 

export JAVA_HOME=/usr/local/java/jdk1.8.0_162
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

Port=8081
JarName=clouddo-server.jar
LogsPatch=./logs_$Port


ID=`ps -ef | grep $Port | grep -v "grep" | awk '{print $2}'`  
echo $ID  
echo "---------------"  
for id in $ID  
do  
kill -s 9 $id  
echo "killed $id"  
done  
echo "---------------"  

rm -rf $LogsPatch
mkdir $LogsPatch

export LANG=zh_CN.UTF-8

set -m 

nohup java -jar -Dlogging.path=$LogsPatch  $JarName>$LogsPatch/catlina.out 2>&1 &

tail -f $LogsPatch/catlina.out

保存命名为xx.sh

记住  springboot项目得在配置文件中配置

 

server:
     context-path: /xcloud-api

Spring boot默认是/  这样直接通过http://ip:port/就可以访问到index页面 但是我们要通过nginx配置多项目的话就要给每一个项目单独指定context-path

在服务器目录根据个人喜好新建一个文件夹 专门用来存放spring-boot打包成的jar 和重启脚本 类似这样

这样方便管理 logs目录是启动脚本之后生成的日志文件夹  忽略 一个项目对应一个文件夹 里面包含项目jar和一个重启shell脚本

这样就可以同时后台启动多个springboot项目并且通过一个域名来访问这些项目  如果要实时查看日志 请进入到每个项目文件的logs-目录执行

tail -f catlina.out就可以查看了   如有不足请指出  多多谅解......

<think>好的,我现在需要帮用户寻找Spring Boot项目的集群化部署方案。首先,用户已经提供了一些相关的引用内容,我需要仔细看看这些引用,看看有没有提到集群化部署的内容。 引用1提到Spring Boot的starter机制,但主要是关于配置和依赖管理的,可能和集群化部署关系不大。引用2和3讲的是项目创建和CI/CD流程,可能涉及部署流程自动化,但还不是直接的集群方案。引用4是关于使用Kubernetes部署Spring Boot应用,这应该和集群有关,因为Kubernetes是容器编排工具,常用于管理集群。引用5提到了自动化部署脚本和Tomcat配置,可能涉及到传统方式部署,但用户问的是集群化,所以可能需要结合容器化方案。 接下来,我需要整理集群化部署的常见方案。一般来说,集群化部署需要考虑负载均衡、服务发现、配置同步、会话管理等问题。常见的方案可能包括: 1. 容器化部署结合Kubernetes,如引用4提到的Docker和K8s,这应该是主流方案。 2. 使用服务注册与发现组件,比如Eureka、Consul等,实现服务自动注册和发现。 3. 配置中心,如Spring Cloud Config,保证集群中各节点的配置一致。 4. 状态管理,比如使用Redis来存储会话,实现无状态服务,方便水平扩展。 5. 传统的反向代理负载均衡,比如Nginx或HAProxy,将流量分发到多个Spring Boot实例。 然后,根据用户提供的引用,特别是引用4中的Kubernetes部署,可能需要详细说明如何利用K8s进行集群部署。另外,引用5中的Tomcat部署可能适用于传统的服务器集群,但可能不够现代化。 还需要考虑是否需要结合CI/CD流程,如引用3提到的,自动化构建和部署到集群环境中。此外,配置管理方面,引用1提到的starter和默认配置可能需要在集群中保持一致,可能需要配置中心的支持。 用户问的是最佳实践,所以可能需要综合容器化、Kubernetes、服务发现、配置中心、无状态设计等要素。同时,需要确保每个步骤有依据,比如引用4的Dockerfile示例,引用3的CI/CD流程,引用5的部署脚本等。 可能还需要提到监控和日志聚合,比如使用Prometheus和ELK栈,但用户提供的引用中没有提到这些,不过作为最佳实践,可能需要简要提及。 最后,生成相关问题时要围绕集群部署的扩展,比如如何实现服务发现、配置管理、监控等。</think>### Spring Boot项目集群化部署最佳实践方案 Spring Boot项目的集群化部署需要结合容器化技术、负载均衡和服务发现机制,以下是分步实施方案: #### 一、容器化封装 1. **创建Docker镜像** 使用Dockerfile将应用封装为独立容器,参考引用4的示例: ```dockerfile FROM openjdk:11-jre-slim COPY target/my-spring-boot-app.jar /app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] ``` 通过CI/CD工具(如Jenkins)自动构建镜像并推送到镜像仓库[^3]。 #### 二、Kubernetes集群编排(主流方案) 1. **部署到K8s集群** 使用Kubernetes的Deployment定义Pod副本数量,实现自动扩缩容: ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: springboot-app spec: replicas: 3 # 集群节点数量 template: spec: containers: - name: app image: registry.example.com/my-spring-boot-app:latest ports: - containerPort: 8080 ``` 2. **服务暴露与负载均衡** 通过Service组件实现内部负载均衡: ```yaml apiVersion: v1 kind: Service metadata: name: springboot-service spec: selector: app: springboot-app ports: - protocol: TCP port: 80 targetPort: 8080 type: LoadBalancer # 云平台自动创建外部负载均衡器 ``` 此方案可支撑千级节点规模,适合高并发场景[^4]。 #### 三、传统服务器集群方案 1. **反向代理配置** 使用Nginx实现流量分发(适合中小规模): ```nginx upstream springboot_cluster { server 192.168.1.101:8080; server 192.168.1.102:8080; server 192.168.1.103:8080; } server { listen 80; location / { proxy_pass http://springboot_cluster; } } ``` 需配合自动化部署脚本同步节点(参考引用5的deploy.sh)[^5]。 #### 四、关键配套组件 1. **配置中心** 使用Spring Cloud Config或Nacos实现集群配置统一管理,避免单点配置修改[^1]。 2. **会话共享** 采用Redis存储会话数据: ```properties spring.session.store-type=redis spring.redis.host=redis-cluster.example.com ``` 3. **服务发现** 集成Eureka或Consul实现节点自动注册: ```java @EnableEurekaClient public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 五、监控保障体系 1. 集成Prometheus收集容器指标 2. 通过ELK栈实现日志聚合分析 3. 配置K8s HPA自动伸缩策略
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值