1. Jetty概述与环境规划
Jetty是一个开源的、基于Java的Web服务器和Servlet容器,由Eclipse基金会维护。它以轻量级、嵌入式、高性能著称,广泛应用于微服务架构、物联网设备和云原生应用。Jetty支持最新的Servlet规范和WebSocket协议。更多学习教程www.fgedu.net.cn
1.1 Jetty版本说明
Jetty目前主要版本为Jetty 12,支持Jakarta EE 10和Servlet 6.0规范。本教程以Jetty 12为例进行详细讲解。
$ java -jar /opt/jetty/start.jar –version
Jetty Server 12.0.6
Jetty Server Classpath:
Version: 12.0.6
Build: 2024-03-15T10:00:00.000Z
Git: 1234567890abcdef
# 查看Jetty状态
$ java -jar /opt/jetty/start.jar –list-modules
# 输出示例:
Jetty Server 12.0.6
Modules:
+ server
+ http
+ https
+ deploy
+ websocket
+ jsp
1.2 环境规划
本次安装环境规划如下:
IP地址:192.168.1.51
Jetty HTTP端口:8080
Jetty HTTPS端口:8443
Jetty管理端口:8081
安装目录:/opt/jetty
数据目录:/data/jetty
日志目录:/var/log/jetty
备份目录:/backup/jetty
Java环境:
JDK版本:OpenJDK 17
JAVA_HOME:/usr/lib/jvm/java-17
JVM堆大小:1GB
1.3 Jetty核心特性
1. 轻量级:核心仅约1MB,启动速度快
2. 嵌入式:可嵌入到应用程序中
3. 模块化:按需加载模块,减少资源占用
4. 异步支持:完全支持NIO和异步Servlet
5. WebSocket:原生支持WebSocket协议
6. HTTP/2:支持HTTP/2协议
7. 云原生:支持Docker和Kubernetes
8. 开源免费:Eclipse基金会维护的开源项目
2. 硬件环境要求与检查
在安装Jetty之前,需要对服务器硬件环境进行全面检查。学习交流加群风哥微信: itpux-com
2.1 最低硬件要求
CPU:1核心
内存:512MB
磁盘:5GB
推荐配置(生产环境):
CPU:2核心以上
内存:2GB以上
磁盘:20GB以上
大型应用配置:
CPU:4核心以上
内存:4GB以上
磁盘:50GB以上SSD
2.2 Java环境检查
$ java -version
openjdk version “17.0.9” 9.0.4
OpenJDK Runtime Environment (Temurin-17.0.9+9) (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode, sharing)
# 检查JAVA_HOME
$ echo $JAVA_HOME
/usr/lib/jvm/java-17
# 查看Java安装路径
$ which java
/usr/bin/java
2.3 系统环境检查
# cat /etc/redhat-release
Red Hat Enterprise Linux release 8.8 (Ootpa)
# 检查内存信息
# free -h
total used free shared buff/cache available
Mem: 7Gi 512Mi 6Gi 128Mi 512Mi 6Gi
Swap: 7Gi 0B 7Gi
# 检查磁盘空间
# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/vg_system-lv_root 50G 3.0G 47G 6% /
/dev/mapper/vg_data-lv_data 200G 20G 180G 10% /data
3. Jetty安装步骤
本节详细介绍Jetty 12的安装过程。学习交流加群风哥QQ113257174
3.1 安装OpenJDK
# dnf install -y java-17-openjdk java-17-openjdk-devel
# 验证安装
$ java -version
openjdk version “17.0.9” 9.0.4
OpenJDK Runtime Environment (Temurin-17.0.9+9) (build 17.0.9+9)
OpenJDK 64-Bit Server VM (build 17.0.9+9, mixed mode, sharing)
# 设置JAVA_HOME
# vi /etc/profile.d/java.sh
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 使配置生效
# source /etc/profile.d/java.sh
$ echo $JAVA_HOME
/usr/lib/jvm/java-17-openjdk
3.2 创建用户和目录
# groupadd -g 1005 jetty
# useradd -u 1005 -g jetty -d /opt/jetty -s /bin/bash jetty
# passwd jetty
# 创建目录
# mkdir -p /opt/jetty
# mkdir -p /data/jetty/{webapps,logs,work}
# mkdir -p /var/log/jetty
# mkdir -p /backup/jetty
# 设置目录权限
# chown -R jetty:jetty /opt/jetty
# chown -R jetty:jetty /data/jetty
# chown -R jetty:jetty /var/log/jetty
# chown -R jetty:jetty /backup/jetty
3.3 下载并安装Jetty
# cd /usr/local/src
# 下载Jetty 12
# wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/12.0.6/jetty-home-12.0.6.tar.gz
# 解压安装
# tar -xzf jetty-home-12.0.6.tar.gz -C /opt/
# 创建软链接
# ln -s /opt/jetty-home-12.0.6 /opt/jetty
# 设置目录权限
# chown -R jetty:jetty /opt/jetty-home-12.0.6
# chown -R jetty:jetty /opt/jetty
# 创建Jetty基础目录
# mkdir -p /opt/jetty-base
# cd /opt/jetty-base
# 初始化Jetty基础目录
$ java -jar /opt/jetty/start.jar –create-startd
# 输出示例:
MKDIR: ${jetty.base}/start.d
INFO: Server classes and dependencies initialized in start.d
# 验证安装
$ ls -la /opt/jetty/
总用量 0
drwxr-xr-x. 2 jetty jetty 4096 4月 4 10:00 bin
drwxr-xr-x. 2 jetty jetty 4096 4月 4 10:00 etc
drwxr-xr-x. 2 jetty jetty 4096 4月 4 10:00 lib
drwxr-xr-x. 2 jetty jetty 4096 4月 4 10:00 modules
drwxr-xr-x. 2 jetty jetty 4096 4月 4 10:00 resources
3.4 配置Jetty环境
$ vi ~/.bash_profile
# 添加以下内容
export JETTY_HOME=/opt/jetty
export JETTY_BASE=/opt/jetty-base
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk
export PATH=$JETTY_HOME/bin:$JAVA_HOME/bin:$PATH
# 使配置生效
$ source ~/.bash_profile
# 验证环境变量
$ echo $JETTY_HOME
/opt/jetty
$ echo $JETTY_BASE
/opt/jetty-base
# 设置目录权限
# chown -R jetty:jetty /opt/jetty-base
3.5 配置Jetty
$ cd /opt/jetty-base
$ java -jar $JETTY_HOME/start.jar –add-module=http
# 输出示例:
INFO: http initialized in start.d/http.ini
INFO: server transitively enabled
INFO: logging-jetty transitively enabled
# 添加部署模块
$ java -jar $JETTY_HOME/start.jar –add-module=deploy
# 输出示例:
INFO: deploy initialized in start.d/deploy.ini
# 添加JSP支持
$ java -jar $JETTY_HOME/start.jar –add-module=jsp
# 输出示例:
INFO: jsp initialized in start.d/jsp.ini
# 编辑HTTP配置
$ vi /opt/jetty-base/start.d/http.ini
# 修改端口
jetty.http.port=8080
jetty.http.host=0.0.0.0
# 配置Jetty
$ vi /opt/jetty-base/start.ini
# 添加以下配置
–module=server
jetty.server.dumpAfterStart=false
jetty.server.dumpBeforeStop=false
# 配置日志
$ vi /opt/jetty-base/start.d/logging-jetty.ini
# 修改日志路径
jetty.logging.dir=/var/log/jetty
jetty.logging.retainDays=30
3.6 启动Jetty
$ cd /opt/jetty-base
$ java -jar $JETTY_HOME/start.jar
# 输出示例:
INFO:oejs.Server:main: jetty-12.0.6; built: 2024-03-15T10:00:00.000Z
INFO:oejs.AbstractConnector:main: Started ServerConnector@12345678{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
INFO:oejs.Server:main: Started Server@87654321{STARTING}[12.0.6,sto=0] @1234ms
# 后台启动
$ java -jar $JETTY_HOME/start.jar &
# 或者使用nohup
$ nohup java -jar $JETTY_HOME/start.jar > /var/log/jetty/jetty.log 2>&1 &
# 检查端口
$ netstat -tlnp | grep java
tcp6 0 0 :::8080 :::* LISTEN 12345/java
# 配置防火墙
# firewall-cmd –permanent –add-port=8080/tcp
success
# firewall-cmd –permanent –add-port=8443/tcp
success
# firewall-cmd –reload
success
# 访问Jetty
# 浏览器访问: http://192.168.1.51:8080
4. Jetty参数配置
Jetty参数配置是性能优化的关键步骤,直接影响系统性能。更多学习教程公众号风哥教程itpux_com
4.1 JVM参数配置
$ vi /opt/jetty-base/start.ini
# 添加JVM参数
–exec
–add-modules=server,http,deploy,jsp
# JVM参数
-Xms1g
-Xmx2g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/jetty/heapdump.hprof
-Djava.awt.headless=true
# 或者使用环境变量
$ export JAVA_OPTIONS=”-Xms1g -Xmx2g -XX:+UseG1GC”
$ java -jar $JETTY_HOME/start.jar
4.2 线程池配置
$ vi /opt/jetty-base/start.d/server.ini
# 配置线程池
jetty.threadPool.maxThreads=200
jetty.threadPool.minThreads=10
jetty.threadPool.idleTimeout=60000
# 配置HTTP连接池
$ vi /opt/jetty-base/start.d/http.ini
# 配置连接参数
jetty.http.acceptors=2
jetty.http.selectors=4
jetty.http.acceptQueueSize=128
4.3 配置HTTPS
$ keytool -genkeypair -alias jetty -keyalg RSA -keysize 2048 -keystore /opt/jetty-base/etc/keystore.p12 -storetype PKCS12 -validity 365 -storepass changeit -keypass changeit -dname “CN=fgedudb01.fgedu.net.cn,OU=IT,O=FGedu,L=BJ,ST=BJ,C=CN”
# 添加HTTPS模块
$ cd /opt/jetty-base
$ java -jar $JETTY_HOME/start.jar –add-module=https
# 输出示例:
INFO: https initialized in start.d/https.ini
INFO: ssl transitively enabled
# 编辑HTTPS配置
$ vi /opt/jetty-base/start.d/https.ini
# 配置HTTPS端口
jetty.ssl.port=8443
jetty.ssl.host=0.0.0.0
# 编辑SSL配置
$ vi /opt/jetty-base/start.d/ssl.ini
# 配置证书
jetty.sslContext.keyStorePath=etc/keystore.p12
jetty.sslContext.keyStorePassword=changeit
jetty.sslContext.keyStoreType=PKCS12
jetty.sslContext.keyManagerPassword=changeit
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
# 测试HTTPS访问
$ curl -k https://192.168.1.51:8443
5. 应用部署
Jetty支持多种应用部署方式,本节介绍常用的部署方法。from:www.itpux.com
5.1 部署WAR应用
$ cp /tmp/fgedu-web.war /opt/jetty-base/webapps/
# Jetty会自动部署
$ ls -la /opt/jetty-base/webapps/
fgedu-web.war
fgedu-web/
# 方式二:配置上下文文件
$ vi /opt/jetty-base/webapps/fgedu-web.xml
# 方式三:使用符号链接
$ ln -s /data/applications/fgedu-web.war /opt/jetty-base/webapps/fgedu-web.war
# 查看部署状态
$ ls -la /opt/jetty-base/webapps/
fgedu-web.war
fgedu-web/
fgedu-web.xml
5.2 配置虚拟主机
$ vi /opt/jetty-base/etc/jetty-virtual-hosts.xml
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
5.3 取消部署
$ rm /opt/jetty-base/webapps/fgedu-web.war
$ rm -rf /opt/jetty-base/webapps/fgedu-web
$ rm -f /opt/jetty-base/webapps/fgedu-web.xml
# Jetty会自动取消部署
# 或者通过上下文文件禁用
$ vi /opt/jetty-base/webapps/fgedu-web.xml
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
6. 集群配置
Jetty支持集群部署,提供高可用性和负载均衡能力。更多学习教程www.fgedu.net.cn
6.1 配置会话复制
$ cd /opt/jetty-base
$ java -jar $JETTY_HOME/start.jar –add-module=sessions
# 输出示例:
INFO: sessions initialized in start.d/sessions.ini
# 编辑会话配置
$ vi /opt/jetty-base/start.d/sessions.ini
# 配置JDBC会话存储
jetty.session.store.jdbc.driverClass=com.mysql.cj.jdbc.Driver
jetty.session.store.jdbc.url=jdbc:mysql://192.168.1.51:3306/fgedudb
jetty.session.store.jdbc.user=fgedu
jetty.session.store.jdbc.password=fgedu123
# 或者配置内存会话存储
jetty.session.store.file.storeDir=/data/jetty/sessions
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
6.2 配置负载均衡
$ vi /etc/nginx/nginx.conf
upstream jetty_backend {
server 192.168.1.51:8080 weight=5;
server 192.168.1.52:8080 weight=5;
ip_hash;
}
server {
listen 80;
server_name www.fgedu.com;
location / {
proxy_pass http://jetty_backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# 重启Nginx
# systemctl restart nginx
7. 安全配置
Jetty提供了完善的安全框架,本节介绍常用的安全配置方法。学习交流加群风哥微信: itpux-com
7.1 配置安全约束
$ vi /opt/jetty-base/webapps/fgedu-web/WEB-INF/web.xml
# 配置realm
$ vi /opt/jetty-base/etc/realm.properties
admin: fgedu123,admin
user: user123,user
7.2 配置IP过滤
$ vi /opt/jetty-base/etc/jetty-ipaccess.xml
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
8. 监控与日志
Jetty提供了完善的监控和日志功能,本节介绍常用的监控配置方法。更多学习教程公众号风哥教程itpux_com
8.1 日志配置
$ vi /opt/jetty-base/start.d/logging-jetty.ini
# 配置日志级别
jetty.logging.level=INFO
jetty.logging.dir=/var/log/jetty
jetty.logging.retainDays=30
# 配置访问日志
$ java -jar $JETTY_HOME/start.jar –add-module=requestlog
# 编辑访问日志配置
$ vi /opt/jetty-base/start.d/requestlog.ini
jetty.requestlog.dir=/var/log/jetty
jetty.requestlog.retainDays=30
jetty.requestlog.append=true
# 查看日志
$ tail -f /var/log/jetty/jetty.log
# 输出示例:
2026-04-04 10:00:00.123 INFO [main] o.e.j.s.Server – jetty-12.0.6
2026-04-04 10:00:00.456 INFO [main] o.e.j.s.AbstractConnector – Started ServerConnector@12345678{HTTP/1.1, (http/1.1)}{0.0.0.0:8080}
8.2 启用JMX监控
$ cd /opt/jetty-base
$ java -jar $JETTY_HOME/start.jar –add-module=jmx
# 输出示例:
INFO: jmx initialized in start.d/jmx.ini
# 编辑JMX配置
$ vi /opt/jetty-base/start.d/jmx.ini
# 配置JMX端口
jetty.jmx.port=1099
jetty.jmx.host=0.0.0.0
# 重启Jetty
$ java -jar $JETTY_HOME/start.jar
# 使用JConsole连接
$ jconsole service:jmx:rmi:///jndi/rmi://192.168.1.51:1099/jmxrmi
8.3 配置统计信息
$ java -jar $JETTY_HOME/start.jar –add-module=stats
# 输出示例:
INFO: stats initialized in start.d/stats.ini
# 查看统计信息
$ curl http://192.168.1.51:8080/jetty-stats
# 输出示例:
{
“server”: {
“startTime”: 1712205600000,
“uptime”: 3600000,
“threads”: {
“max”: 200,
“busy”: 10,
“idle”: 20
},
“connections”: {
“open”: 50,
“max”: 100
}
}
}
9. 升级与迁移
Jetty升级和迁移是运维工作中的重要环节,需要仔细规划和执行。from:www.itpux.com
9.1 版本升级
$ java -jar /opt/jetty/start.jar –version
Jetty Server 12.0.6
# 完整备份当前Jetty
$ tar -czf /backup/jetty/jetty_backup_$(date +%Y%m%d).tar.gz /opt/jetty /opt/jetty-base
# 备份配置文件
$ cp /opt/jetty-base/start.ini /backup/jetty/start.ini.$(date +%Y%m%d)
$ cp -r /opt/jetty-base/start.d /backup/jetty/start.d.$(date +%Y%m%d)
# 停止Jetty
$ pkill -f jetty
# 下载新版本
# wget https://repo1.maven.org/maven2/org/eclipse/jetty/jetty-home/12.0.7/jetty-home-12.0.7.tar.gz
# 解压新版本
# tar -xzf jetty-home-12.0.7.tar.gz -C /opt/
# 更新软链接
# rm -f /opt/jetty
# ln -s /opt/jetty-home-12.0.7 /opt/jetty
# 设置权限
# chown -R jetty:jetty /opt/jetty-home-12.0.7
# chown -R jetty:jetty /opt/jetty
# 启动Jetty
$ java -jar $JETTY_HOME/start.jar
# 验证版本
$ java -jar /opt/jetty/start.jar –version
Jetty Server 12.0.7
9.2 迁移到新服务器
$ tar -czf /backup/jetty/jetty_migrate_$(date +%Y%m%d).tar.gz /opt/jetty /opt/jetty-base
# 传输备份文件
$ scp /backup/jetty/jetty_migrate_*.tar.gz new-server:/tmp/
# 在新服务器安装Jetty
# 参见3.1-3.4节安装步骤
# 恢复配置
# tar -xzf /tmp/jetty_migrate_*.tar.gz -C /
# 设置权限
# chown -R jetty:jetty /opt/jetty
# chown -R jetty:jetty /opt/jetty-base
# 启动Jetty
$ java -jar $JETTY_HOME/start.jar
# 验证迁移
$ curl http://192.168.1.52:8080
10. 生产环境实战案例
本节提供一个完整的生产环境配置案例,帮助读者更好地理解Jetty的实际应用。更多学习教程www.fgedu.net.cn
10.1 生产环境完整配置
# 1. 编辑start.ini
$ vi /opt/jetty-base/start.ini
# 基础配置
–module=server
–module=http
–module=https
–module=deploy
–module=jsp
–module=sessions
–module=logging-jetty
–module=requestlog
–module=jmx
–module=stats
# JVM参数
–exec
-Xms2g
-Xmx4g
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/jetty/heapdump.hprof
-Djava.awt.headless=true
# 2. 编辑server.ini
$ vi /opt/jetty-base/start.d/server.ini
jetty.threadPool.maxThreads=500
jetty.threadPool.minThreads=50
jetty.threadPool.idleTimeout=60000
# 3. 编辑http.ini
$ vi /opt/jetty-base/start.d/http.ini
jetty.http.port=8080
jetty.http.host=0.0.0.0
jetty.http.acceptors=4
jetty.http.selectors=8
# 4. 编辑https.ini
$ vi /opt/jetty-base/start.d/https.ini
jetty.ssl.port=8443
jetty.ssl.host=0.0.0.0
jetty.sslContext.keyStorePath=etc/keystore.p12
jetty.sslContext.keyStorePassword=changeit
# 5. 创建启动脚本
$ vi /opt/jetty-base/start-jetty.sh
#!/bin/bash
JETTY_HOME=/opt/jetty
JETTY_BASE=/opt/jetty-base
export JETTY_HOME JETTY_BASE
cd $JETTY_BASE
java -jar $JETTY_HOME/start.jar
# 6. 创建systemd服务
$ vi /etc/systemd/system/jetty.service
[Unit]
Description=Jetty Web Server
After=network.target
[Service]
Type=simple
User=jetty
Group=jetty
WorkingDirectory=/opt/jetty-base
ExecStart=/usr/bin/java -jar /opt/jetty/start.jar
ExecStop=/bin/kill -TERM $MAINPID
Restart=on-failure
[Install]
WantedBy=multi-user.target
# 启用服务
# systemctl enable jetty
# systemctl start jetty
10.2 性能监控配置
$ java -jar $JETTY_HOME/start.jar –add-module=stats
# 查看统计信息
$ curl http://192.168.1.51:8080/jetty-stats
# 输出示例:
{
“server”: {
“version”: “12.0.6”,
“startTime”: 1712205600000,
“uptime”: 86400000,
“threads”: {
“max”: 500,
“busy”: 25,
“idle”: 75,
“queueSize”: 0
},
“connections”: {
“open”: 120,
“max”: 1000,
“total”: 50000
},
“memory”: {
“heapMax”: 4294967296,
“heapUsed”: 2147483648,
“heapFree”: 2147483648
}
}
}
# 使用JMX监控
$ jconsole service:jmx:rmi:///jndi/rmi://192.168.1.51:1099/jmxrmi
10.3 性能调优实战
$ vi /opt/jetty-base/start.d/server.ini
jetty.threadPool.maxThreads=500
jetty.threadPool.minThreads=100
jetty.threadPool.idleTimeout=120000
# HTTP优化
$ vi /opt/jetty-base/start.d/http.ini
jetty.http.acceptors=8
jetty.http.selectors=16
jetty.http.acceptQueueSize=256
# 输出缓冲区优化
$ vi /opt/jetty-base/start.ini
-Dorg.eclipse.jetty.server.Request.maxFormContentSize=1000000
-Dorg.eclipse.jetty.server.Request.maxFormKeys=10000
# 会话优化
$ vi /opt/jetty-base/start.d/sessions.ini
jetty.session.maxSessions=10000
jetty.session.savePeriod.seconds=60
# 重启Jetty使配置生效
$ java -jar $JETTY_HOME/start.jar
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
