spring boot应用部署IIS

Windows IIS 部署 Spring Boot 应用详细指南

本文档提供了在 Windows Server 上使用 IIS 部署 Spring Boot 应用的完整步骤和最佳实践。

目录

  1. 概述
  2. 前期准备
  3. Spring Boot 应用准备
  4. 安装配置必要组件
  5. 配置 IIS 站点
  6. 配置反向代理
  7. 配置 Windows 服务
  8. 配置应用自启动
  9. HTTPS 配置
  10. 日志配置
  11. 部署多个应用
  12. 性能优化
  13. 常见问题排查
  14. 最佳实践

概述

Spring Boot 应用通常是独立的 Java 应用程序,它们自带嵌入式 Web 服务器(如 Tomcat、Jetty 或 Undertow)。在 Windows 环境中,虽然可以直接运行这些应用,但使用 IIS 作为前端服务器有以下优势:

  • 更好的静态资源处理能力
  • 提供额外的安全层
  • 集成 Windows 认证
  • 集中管理多个应用
  • 利用 IIS 的高级功能(如缓存、压缩等)

本指南将介绍如何使用 IIS 作为反向代理来部署 Spring Boot 应用。

前期准备

Windows Server 环境准备

  1. 安装或确认 IIS 已安装

    • 打开服务器管理器 → 添加角色和功能
    • 安装 Web 服务器 (IIS) 角色
    • 确保以下功能已选中:
      • Web 服务器 → 通用 HTTP 功能 → 静态内容
      • Web 服务器 → 应用程序开发 → WebSocket 协议
      • Web 服务器 → 性能 → 压缩静态内容
      • 管理工具 → IIS 管理控制台
  2. 安装 URL 重写模块

  3. 安装 Application Request Routing (ARR)

Java 环境准备

  1. 安装 JDK

    • 下载并安装适合的 JDK 版本(推荐 JDK 11 或更高版本)
    • 设置 JAVA_HOME 环境变量
    • 添加 Java 到 PATH 环境变量
  2. 验证 Java 安装

    java -version
    

Spring Boot 应用准备

应用打包

  1. 配置应用端口
    application.propertiesapplication.yml 中设置端口:

    server.port=8080
    
  2. 构建可执行 JAR 文件

    mvn clean package -DskipTests
    

    或使用 Gradle:

    ./gradlew bootJar
    
  3. 测试应用

    java -jar target/your-application.jar
    

    确保应用可以正常启动并访问。

优化应用配置

  1. 配置日志输出到文件
    application.properties 中添加:

    logging.file.name=logs/application.log
    logging.file.max-size=10MB
    logging.file.max-history=10
    
  2. 配置健康检查端点

    management.endpoints.web.exposure.include=health,info,metrics
    management.endpoint.health.show-details=always
    
  3. 配置应用上下文路径(可选):
    如果需要在子路径下运行应用:

    server.servlet.context-path=/myapp
    

安装配置必要组件

设置应用服务器目录

  1. 创建应用目录

    mkdir C:\SpringBootApps\my-application
    
  2. 创建子目录

    mkdir C:\SpringBootApps\my-application\logs
    mkdir C:\SpringBootApps\my-application\config
    
  3. 复制应用文件
    将构建好的 JAR 文件复制到应用目录:

    copy target\your-application.jar C:\SpringBootApps\my-application\
    
  4. 创建应用配置文件(可选):
    如果需要覆盖默认配置,创建 application.propertiesapplication.yml 文件:

    copy src\main\resources\application.properties C:\SpringBootApps\my-application\config\
    
  5. 创建启动脚本
    创建 start.bat 文件:

    @echo off
    set JAVA_HOME=C:\Program Files\Java\jdk-11
    set PATH=%JAVA_HOME%\bin;%PATH%
    cd /d C:\SpringBootApps\my-application
    java -Xms256m -Xmx512m -jar your-application.jar --spring.config.location=file:./config/
    

配置 IIS 站点

创建和配置 IIS 网站

  1. 打开 IIS 管理器

    • 开始菜单 → 管理工具 → Internet Information Services (IIS) 管理器
  2. 创建应用程序池

    • 右键点击"应用程序池" → “添加应用程序池”
    • 名称:MyApplicationPool
    • .NET CLR 版本:无托管代码
    • 托管管道模式:集成
    • 点击确定
  3. 创建网站

    • 右键点击"网站" → “添加网站”
    • 网站名称:MySpringBootApp
    • 物理路径:C:\inetpub\wwwroot\myapp(创建一个空目录)
    • 端口:80(或其他可用端口)
    • 点击确定
  4. 创建物理目录

    mkdir C:\inetpub\wwwroot\myapp
    

配置反向代理

配置 ARR 和 URL 重写

  1. 启用 ARR 代理功能

    • 在 IIS 管理器中选择服务器级别
    • 双击"Application Request Routing Cache"
    • 点击右侧操作面板中的"服务器代理设置"
    • 勾选"启用代理"
    • 点击"应用"
  2. 创建 URL 重写规则

    • 选择您创建的网站
    • 双击"URL 重写"
    • 在右侧操作面板中点击"添加规则"
    • 选择"空白规则"
    • 配置如下:
      • 名称:ReverseProxyInbound
      • 模式:(.*)
      • 操作类型:重写
      • 重写 URL:http://localhost:8080/{R:1}
      • 点击"应用"
  3. 添加反向代理配置到 web.config
    在网站的物理路径 (C:\inetpub\wwwroot\myapp) 创建 web.config 文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <system.webServer>
        <rewrite>
          <rules>
            <rule name="ReverseProxyInbound" stopProcessing="true">
              <match url="(.*)" />
              <action type="Rewrite" url="http://localhost:8080/{R:1}" />
              <conditions>
              </conditions>
            </rule>
          </rules>
          <outboundRules>
            <rule name="ReverseProxyOutbound" preCondition="ResponseIsHtml1">
              <match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8080/(.*)" />
              <action type="Rewrite" value="/{R:2}" />
            </rule>
            <preConditions>
              <preCondition name="ResponseIsHtml1">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
              </preCondition>
            </preConditions>
          </outboundRules>
        </rewrite>
        <httpErrors errorMode="Custom">
          <remove statusCode="404" subStatusCode="-1" />
          <error statusCode="404" prefixLanguageFilePath="" path="/" responseMode="ExecuteURL" />
        </httpErrors>
      </system.webServer>
    </configuration>
    
  4. 配置 ARR 绕过本地请求(提高性能):

    • 选择服务器级别
    • 双击"Application Request Routing Cache"
    • 点击"服务器代理设置"
    • 取消勾选"在服务器变量或标头中传递请求标头"
    • 点击"应用"

配置 Windows 服务

使用 NSSM 创建 Windows 服务

  1. 下载 NSSM (Non-Sucking Service Manager)

    • NSSM 官网 下载
    • 解压到合适的位置,例如 C:\Tools\nssm
  2. 创建服务

    C:\Tools\nssm\win64\nssm.exe install MySpringBootService
    
  3. 在弹出的界面中配置服务

    • 路径:C:\Program Files\Java\jdk-11\bin\java.exe
    • 启动目录:C:\SpringBootApps\my-application
    • 参数:-Xms256m -Xmx512m -jar your-application.jar --spring.config.location=file:./config/
  4. 配置详细信息

    • 切换到"详细信息"选项卡
    • 显示名称:My Spring Boot Application
    • 描述:Spring Boot application running as a service
    • 启动类型:自动
  5. 配置日志

    • 切换到"I/O"选项卡
    • 输出(stdout):C:\SpringBootApps\my-application\logs\service-stdout.log
    • 错误(stderr):C:\SpringBootApps\my-application\logs\service-stderr.log
    • 点击"安装服务"
  6. 启动服务

    net start MySpringBootService
    

    或通过服务管理控制台启动。

配置应用自启动

检查和配置服务自启动

  1. 确认服务自启动设置

    • 打开"服务"管理控制台(services.msc)
    • 找到创建的服务 MySpringBootService
    • 确认"启动类型"设置为"自动"
  2. 设置依赖关系(可选):
    如果应用依赖于其他服务(如数据库),可以设置服务依赖:

    sc config MySpringBootService depend= MSSQLSERVER
    

设置 IIS 站点自启动

  1. 配置 IIS 站点自启动
    • 在 IIS 管理器中,选择创建的网站
    • 在右侧操作面板中点击"高级设置"
    • 将"启动自动启动"设置为"True"
    • 点击"确定"

HTTPS 配置

配置 SSL 证书

  1. 获取 SSL 证书

    • 从证书颁发机构购买证书
    • 使用 Let’s Encrypt 免费证书
    • 创建自签名证书(仅测试环境)
  2. 安装证书

    • 在 IIS 管理器中选择服务器
    • 双击"服务器证书"
    • 在右侧操作面板中点击"导入"(如果已有证书文件)或"创建自签名证书"
    • 按照向导完成证书导入或创建
  3. 绑定 HTTPS

    • 在 IIS 管理器中选择您的网站
    • 在右侧操作面板中点击"绑定…"
    • 点击"添加"
    • 类型:https
    • IP 地址:All Unassigned(或指定 IP)
    • 端口:443
    • 主机名:您的域名(可选)
    • SSL 证书:选择安装的证书
    • 点击"确定"

配置 Spring Boot 应用支持 HTTPS

如果您希望 Spring Boot 应用本身也支持 HTTPS,可以在 application.properties 中添加:

server.ssl.key-store=classpath:keystore.p12
server.ssl.key-store-password=your-password
server.ssl.key-store-type=PKCS12
server.ssl.key-alias=tomcat

注意:当 IIS 已经配置了 HTTPS,通常不需要 Spring Boot 应用再配置 HTTPS。

日志配置

配置 IIS 日志

  1. 配置 IIS 站点日志
    • 在 IIS 管理器中选择您的网站
    • 双击"日志记录"
    • 设置合适的日志格式和路径
    • 点击"应用"

配置 Spring Boot 日志

  1. 使用 logback 进行高级日志配置
    C:\SpringBootApps\my-application\config 目录下创建 logback-spring.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
      <property name="LOG_PATH" value="logs" />
      
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
          <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      </appender>
      
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
          <fileNamePattern>${LOG_PATH}/application.%d{yyyy-MM-dd}.log</fileNamePattern>
          <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
          <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      </appender>
      
      <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
      </root>
    </configuration>
    

部署多个应用

使用多个网站或应用程序

  1. 为每个 Spring Boot 应用创建独立服务
    使用 NSSM 为每个应用创建单独的 Windows 服务。

  2. 配置方法 A:多个 IIS 网站

    • 为每个 Spring Boot 应用创建独立的 IIS 网站
    • 每个网站使用不同的端口或主机名
  3. 配置方法 B:使用应用程序

    • 创建一个主网站
    • 为每个 Spring Boot 应用添加应用程序:
      • 右键点击网站 → “添加应用程序”
      • 别名:app1
      • 物理路径:为此应用创建的目录
      • 点击"确定"
    • 为每个应用程序配置单独的 URL 重写规则

性能优化

IIS 性能优化

  1. 启用静态和动态内容压缩

    • 在 IIS 管理器中选择服务器
    • 双击"压缩"
    • 启用静态和动态内容压缩
    • 点击"应用"
  2. 配置输出缓存

    • 在 IIS 管理器中选择您的网站
    • 双击"输出缓存"
    • 添加适当的缓存规则
    • 点击"应用"
  3. 优化应用程序池设置

    • 右键点击您的应用程序池 → “高级设置”
    • 将"闲置超时"设置为更长时间(例如 0 表示永不超时)
    • 配置合适的回收设置
    • 点击"确定"

Spring Boot 性能优化

  1. 调整 JVM 参数
    更新服务启动参数,添加合适的 JVM 选项:

    -Xms512m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200
    
  2. 启用响应压缩
    application.properties 中添加:

    server.compression.enabled=true
    server.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plain
    server.compression.min-response-size=2048
    
  3. 配置 Tomcat 连接池

    server.tomcat.max-threads=200
    server.tomcat.min-spare-threads=20
    server.tomcat.max-connections=10000
    

常见问题排查

应用无法启动

  1. 检查 Java 版本兼容性

    java -version
    

    确保 Java 版本与 Spring Boot 应用兼容。

  2. 检查服务日志
    查看服务输出日志:

    C:\SpringBootApps\my-application\logs\service-stdout.log
    C:\SpringBootApps\my-application\logs\service-stderr.log
    
  3. 检查应用日志
    查看应用日志:

    C:\SpringBootApps\my-application\logs\application.log
    
  4. 检查端口占用

    netstat -ano | findstr :8080
    

    如果端口已被占用,修改应用的端口配置。

网站连接错误

  1. 检查 IIS 站点是否启动
    在 IIS 管理器中确认网站状态为"已启动"。

  2. 检查 URL 重写规则
    确认 web.config 中的 URL 重写规则正确。

  3. 检查防火墙设置
    确保必要的端口已在 Windows 防火墙中开放。

  4. 检查反向代理配置
    确认 ARR 代理功能已启用。

  5. 检查 IIS 日志
    查看 IIS 日志了解具体错误。

常见错误码排查

  1. HTTP 404

    • 检查 Spring Boot 应用是否正常运行
    • 确认 URL 重写规则正确
    • 确认请求路径与应用的上下文路径匹配
  2. HTTP 500

    • 检查应用日志获取详细错误信息
    • 确认应用配置无误
    • 检查数据库连接等外部依赖
  3. HTTP 502

    • 表示反向代理无法连接到后端 Spring Boot 应用
    • 确认应用服务正在运行
    • 检查端口配置

最佳实践

安全性最佳实践

  1. 配置 HTTPS
    始终使用 HTTPS 保护数据传输。

  2. 使用适当的防火墙规则
    仅开放必要的端口。

  3. 定期更新系统和组件
    保持 Windows、IIS、Java 和应用依赖的最新安全补丁。

  4. 实施适当的身份验证和授权
    考虑使用 Windows 认证或其他安全机制。

  5. 保护敏感配置信息
    避免在源代码中存储敏感信息,使用环境变量或加密配置。

维护最佳实践

  1. 实施自动化备份
    定期备份应用、配置和数据库。

  2. 监控应用和服务器性能
    使用适当的监控工具(如 Spring Boot Actuator、Windows 性能监视器)。

  3. 日志轮转和管理
    实施日志轮转策略,防止日志文件过大。

  4. 定期检查和清理临时文件
    维护服务器空间。

  5. 制定部署和回滚策略
    确保能够快速响应问题并恢复服务。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值