Spring boot + Undertow + 腾讯云https证书配置SSL访问项目( 多个项目使用SSL也可以,需要利用Nginx )

本文介绍如何在SpringBoot项目中使用Undertow容器配置HTTPS,并通过Nginx实现多项目SSL证书的配置。首先需要在pom.xml中加入Undertow依赖,并在application.yml中设置SSL配置信息,接着通过Java代码配置Undertow。当在同一主机上有多个SpringBoot+Undertow项目时,可以通过Nginx转发不同子域名的请求。

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

tomcat的https配置和undertow差不多的,由于 spring boot + undertow + https的配置资料比较缺少,这里写一篇文章

1.单个主机上配置
  • 先在pom.xml加入undertow容器依赖
<!--undertow web容器-->  
 <dependency>  
     <groupId>org.springframework.boot</groupId>  
     <artifactId>spring-boot-starter-undertow</artifactId>  
 </dependency> 
  • 在腾讯云后台下载好免费的证书,下载后,在本地的解压目录找到tomcat包
    这里写图片描述
    其中kdystorePass.txt为证书密码

  • 在application.yml中设置SSL配置信息

server:
    #web容器的SSL端口,不能删除
    port: 443
    #自定义声明http的端口,将在配置代码使用
    http-port: 8070
    ssl:
    #指定证书的位置,把证书copy到/resource/config的目录下
    key-store: classpath:config/youconfig.jks
    #证书密钥,文件kdystorePass.txt的内容
    key-password: 123456 
  • 在java代码配置undow
import io.undertow.servlet.api.SecurityConstraint;
import io.undertow.servlet.api.SecurityInfo;
import io.undertow.servlet.api.TransportGuaranteeType;
import io.undertow.servlet.api.WebResourceCollection;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.undertow.UndertowBuilderCustomizer;
import org.springframework.boot.context.embedded.undertow.UndertowEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class UndertowConfig {
    @Value("${server.http-port}")
    private int httpPort;
    @Value("${server.port}")
    private int httpsPort;

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        UndertowEmbeddedServletContainerFactory undertowFactory = new UndertowEmbeddedServletContainerFactory();
        //监听http端口
        undertowFactory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> builder.addHttpListener(httpPort, "0.0.0.0"));
        //将http的8070端口重定向到https的端口上
        undertowFactory.addDeploymentInfoCustomizers(deploymentInfo -> {
        deploymentInfo.addSecurityConstraint(new SecurityConstraint()
            .addWebResourceCollection(new WebResourceCollection()
            .addUrlPattern("/*")) .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
            .setEmptyRoleSemantic(SecurityInfo.EmptyRoleSemantic.PERMIT))
            .setConfidentialPortManager(exchange -> httpsPort);
        });
        return undertowFactory;
    }
} 

最后启动项目访问即可。

2.若在同一主机上,结合Nginx对有两个(或多个)Spring boot + Undertow 项目配置SSL

由于443端口只有一个,这里需Nginx端口转发辅助

  • 在服务器搞一个Nginx,并配置两个不同的子域名

    A.host.com 、B.host.com

  • 在腾讯云申请两个子域名的免费证书并下载,下载后,在本地的解压目录找到Nginx包

这里写图片描述 这里写图片描述
把A和B的证书文件都上传到服务器 路径为/usr/ssl/

  • 基于案例1基础上,A和B先配置好项目的SSL证书(先测试启动是否正常),并对A、B项目配置不同的SSL端口

请针对A项目修改application.yml的配置server.port为8443(自定义)
请针对B项目修改application.yml的配置server.port为7443(自定义)

  • Nginx配置如下
server {
    listen 443 ssl;
    server_name A.host.com;
    ssl on;
    # A项目的证书路径
    ssl_certificate "/usr/ssl/A_bundle.crt";
    ssl_certificate_key "/usr/ssl/A.key";
    location / {
        #对应项目修改的端口和域名
        proxy_pass https://A.host.com:8443;
    }
}
server {
    listen 443 ssl;
    server_name B.host.com;
    ssl on;
    # B项目的证书路径
    ssl_certificate "/usr/ssl/B_bundle.crt";
    ssl_certificate_key "/usr/ssl/B.key";
    location / {
        #对应项目修改的端口和域名
        proxy_pass https://B.host.com:7443 ;
    }
} 
  • 启动Nginx + A、B项目

注意:多个项目配置SSL,需要A,B项目内嵌容器配置SSL(指定Tomcat的版本证书),Nginx也需要配置SSL(指定Nginx的版本证书),项目使用的证书和Nginx使用的是不一样的

<think>好的,我现在需要回答用户关于在Java项目生产环境中,除了Nginx之外还需要哪些必要软件及其功能的问题。首先,用户已经提到了使用Nginx,所以我要考虑其他常见的组件。 首先,Java项目通常需要应用服务器来运行,比如Tomcat或者Spring Boot内嵌的服务器。Tomcat是一个常用的Servlet容器,支持Java Web应用。如果是微服务架构,可能还需要用到Spring Boot或其他的应用服务器。 接下来是数据库。大多数Java项目都需要持久化数据,所以MySQL或者PostgreSQL这样的关系型数据库是必要的。此外,有些项目可能使用NoSQL数据库,比如MongoDB,用于处理非结构化数据。 缓存方面,Redis是一个非常流行的选择,用于提升读取速度和减轻数据库压力。消息队列也是关键组件,比如RabbitMQ或Kafka,用于异步处理和解耦服务。 监控和日志管理也很重要。Prometheus和Grafana可以用来监控应用性能,而ELK栈(Elasticsearch, Logstash, Kibana)帮助收集和分析日志。 容器化和编排工具,比如Docker和Kubernetes,在现代部署中几乎是标配,它们简化了环境一致性和扩展性。 另外,配置中心如Spring Cloud Config或Apollo,可以动态管理配置。安全方面可能需要SSL证书和防火墙设置,比如使用Let's Encrypt获取免费证书,或者配置云服务商的安全组。 持续集成和部署工具,如Jenkins或GitLab CI,自动化构建和部署流程。备份工具如Percona XtraBackup确保数据安全。 还要考虑反向代理和负载均衡,虽然用户已经用了Nginx,但可能需要补充其他相关工具,比如HAProxy,不过Nginx本身已经具备这些功能。 需要检查用户提供的引用内容是否有相关软件。引用[1]提到了MySQL5.7、Redis5.0,引用[3]提到了Tomcat集群。所以这些组件应该被包含在回答中,并适当引用。 现在需要把这些组件分类整理,说明每个软件的功能,并确保引用正确的来源。例如,提到MySQL和Redis时引用[1],Tomcat集群引用[3]。 可能还需要补充容器化部分,因为引用[1]使用Docker部署环境,所以Docker和Kubernetes也是必要提及的。此外,监控和日志部分虽然没有直接引用,但属于生产环境常见需求,需要包含。 最后,生成相关问题时要围绕部署环境、组件功能、优化等方面提问。</think>在Java项目生产环境中,除了Nginx外,通常还需要以下关键软件及功能组件: --- ### 1. **应用服务器** - **Tomcat/Spring Boot内嵌容器**:托管Java Web应用,处理HTTP请求和Servlet生命周期管理。若使用微服务架构,Spring Boot内置Tomcat或Undertow可简化部署[^3]。 - **示例配置**: ```bash # 启动Tomcat集群节点 ./bin/startup.sh ``` --- ### 2. **数据库** - **MySQL/PostgreSQL**:关系型数据库,用于结构化数据存储。例如用户信息、订单数据等。引用[1]中使用了MySQL 5.7作为数据库组件[^1]。 - **MongoDB**:非关系型数据库,适用于高并发读写或非结构化数据场景。 --- ### 3. **缓存系统** - **Redis**:内存数据库,提供高速缓存、会话共享、分布式锁等功能。引用[1]部署了Redis 5.0以支持缓存需求[^1]。 - 关键功能:缓存热点数据、限流控制(如令牌桶算法)。 --- ### 4. **消息队列** - **RabbitMQ/Kafka**:实现异步通信和解耦服务,适用于订单排队、日志收集等场景。 - RabbitMQ:轻量级,支持AMQP协议。 - Kafka:高吞吐量,适合大数据流处理。 --- ### 5. **监控与日志** - **Prometheus + Grafana**:监控JVM性能、接口响应时间等指标,生成可视化报表。 - **ELK Stack (Elasticsearch, Logstash, Kibana)**:集中管理日志,支持实时检索与分析。 --- ### 6. **容器化与编排** - **Docker**:实现环境隔离和快速部署。引用[1]通过Docker容器化Java运行环境。 - **Kubernetes**:自动化容器扩缩容、服务发现和负载均衡。 --- ### 7. **配置中心** - **Spring Cloud Config/Apollo**:动态管理配置文件,避免重启服务即可生效。 --- ### 8. **安全组件** - **SSL证书(如Let's Encrypt)**:通过HTTPS加密通信。 - **防火墙/安全组**:限制非法IP访问,保护端口安全。 --- ### 9. **CI/CD工具** - **Jenkins/GitLab CI**:自动化构建、测试和部署流程。 --- ### 10. **备份工具** - **Percona XtraBackup**:实现MySQL热备份,保障数据安全。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值