spring boot应用部署IIS

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

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

目录

  1. 概述
  2. 前期准备
  3. [Spring Boot 应用准备](#Spring Boot 应用准备)
  4. 安装配置必要组件
  5. [配置 IIS 站点](#配置 IIS 站点)
  6. 配置反向代理
  7. [配置 Windows 服务](#配置 Windows 服务)
  8. 配置应用自启动
  9. [HTTPS 配置](#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 安装:

    cmd 复制代码
    java -version

Spring Boot 应用准备

应用打包

  1. 配置应用端口 :

    在 application.properties 或 application.yml 中设置端口:

    properties 复制代码
    server.port=8080
  2. 构建可执行 JAR 文件:

    bash 复制代码
    mvn clean package -DskipTests

    或使用 Gradle:

    bash 复制代码
    ./gradlew bootJar
  3. 测试应用:

    bash 复制代码
    java -jar target/your-application.jar

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

优化应用配置

  1. 配置日志输出到文件 :

    在 application.properties 中添加:

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

    properties 复制代码
    management.endpoints.web.exposure.include=health,info,metrics
    management.endpoint.health.show-details=always
  3. 配置应用上下文路径 (可选):

    如果需要在子路径下运行应用:

    properties 复制代码
    server.servlet.context-path=/myapp

安装配置必要组件

设置应用服务器目录

  1. 创建应用目录:

    cmd 复制代码
    mkdir C:\SpringBootApps\my-application
  2. 创建子目录:

    cmd 复制代码
    mkdir C:\SpringBootApps\my-application\logs
    mkdir C:\SpringBootApps\my-application\config
  3. 复制应用文件 :

    将构建好的 JAR 文件复制到应用目录:

    cmd 复制代码
    copy target\your-application.jar C:\SpringBootApps\my-application\
  4. 创建应用配置文件 (可选):

    如果需要覆盖默认配置,创建 application.properties 或 application.yml 文件:

    cmd 复制代码
    copy src\main\resources\application.properties C:\SpringBootApps\my-application\config\
  5. 创建启动脚本 :

    创建 start.bat 文件:

    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. 创建物理目录:

    cmd 复制代码
    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 复制代码
    <?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. 创建服务:

    cmd 复制代码
    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. 启动服务:

    cmd 复制代码
    net start MySpringBootService

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

配置应用自启动

检查和配置服务自启动

  1. 确认服务自启动设置:

    • 打开"服务"管理控制台(services.msc)
    • 找到创建的服务 MySpringBootService
    • 确认"启动类型"设置为"自动"
  2. 设置依赖关系 (可选):

    如果应用依赖于其他服务(如数据库),可以设置服务依赖:

    cmd 复制代码
    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 中添加:

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 复制代码
    <?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 中添加:

    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 连接池:

    properties 复制代码
    server.tomcat.max-threads=200
    server.tomcat.min-spare-threads=20
    server.tomcat.max-connections=10000

常见问题排查

应用无法启动

  1. 检查 Java 版本兼容性:

    cmd 复制代码
    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. 检查端口占用:

    cmd 复制代码
    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. 制定部署和回滚策略 :

    确保能够快速响应问题并恢复服务。


相关推荐
子兮曰3 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
小羊没烦恼!3 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
子兮曰4 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
俊昭喜喜里4 天前
java中的继承和多态的区别
java
小羊没烦恼!4 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
爱勇宝4 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
譕痕4 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码4 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖4 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时4 天前
01-06-A-JVM排查实战详解
java·jvm