目录
[二、确认 Tomcat 已运行](#二、确认 Tomcat 已运行)
[Ubuntu 防火墙](#Ubuntu 防火墙)
[五、安装 Nginx](#五、安装 Nginx)
[启动 Nginx](#启动 Nginx)
[六、浏览器测试 Nginx](#六、浏览器测试 Nginx)
[七、配置 Nginx 反向代理](#七、配置 Nginx 反向代理)
[1. 创建配置文件](#1. 创建配置文件)
[2. 写入配置](#2. 写入配置)
[3. 启用配置](#3. 启用配置)
[4. 测试 Nginx 配置](#4. 测试 Nginx 配置)
[5. 重启 Nginx](#5. 重启 Nginx)
[九、安装 HTTPS(Let's Encrypt)](#九、安装 HTTPS(Let's Encrypt))
[1. 安装 Certbot](#1. 安装 Certbot)
[2. 自动申请 HTTPS](#2. 自动申请 HTTPS)
[3. 按提示操作](#3. 按提示操作)
[4. 自动完成 HTTPS](#4. 自动完成 HTTPS)
[十、现在你的网站已经 HTTPS 化](#十、现在你的网站已经 HTTPS 化)
[十一、HTTPS 自动续期](#十一、HTTPS 自动续期)
[十二、最终 Nginx HTTPS 配置(自动生成)](#十二、最终 Nginx HTTPS 配置(自动生成))
[1. 增加上传大小限制](#1. 增加上传大小限制)
[2. 开启 gzip](#2. 开启 gzip)
[3. 重启 Nginx](#3. 重启 Nginx)
适用于:
-
Ubuntu
-
Nginx
-
Docker
-
Apache Tomcat
-
demo.war
最终效果:
用户访问:
https://域名/demo
实际流向:
浏览器
↓ HTTPS(443)
Nginx
↓ 反向代理
Tomcat(Docker 8086)
↓
demo.war
这样是生产环境标准方案。
一、准备条件
你必须已经具备:
| 条件 | 是否需要 |
|---|---|
| 云服务器 | 必须 |
| 域名 | 必须 |
| Docker 已安装 | 必须 |
| tomcat:9 已运行 | 必须 |
| demo.war 已部署 | 必须 |
二、确认 Tomcat 已运行
先检查:
docker ps
确保存在:
tomcat9
并且:
0.0.0.0:8086->8080/tcp
三、域名解析(极其重要)
进入你的域名控制台:
例如:
添加:
| 类型 | 主机记录 | 值 |
|---|---|---|
| A | @ | 你的服务器IP |
| A | www | 你的服务器IP |
例如:
example.com -> 1.2.3.4
四、开放服务器端口
必须开放:
| 端口 | 用途 |
|---|---|
| 80 | HTTP |
| 443 | HTTPS |
| 8086 | Tomcat |
Ubuntu 防火墙
执行:
ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 8086/tcp
云服务器安全组
还必须开放:
80
443
8086
否则 HTTPS 不通。
五、安装 Nginx
安装:
apt install -y nginx
启动 Nginx
systemctl enable nginx
systemctl start nginx
查看状态
systemctl status nginx
出现:
active (running)
即可。
六、浏览器测试 Nginx
浏览器访问:
http://你的IP
如果看到:
Welcome to nginx!
说明成功。
七、配置 Nginx 反向代理
1. 创建配置文件
进入:
cd /etc/nginx/sites-available
创建:
vim demo
2. 写入配置
把:
server {
listen 80;
server_name 你的域名 www.你的域名;
location / {
proxy_pass http://127.0.0.1:8086;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
修改为你的真实域名。
例如:
server {
listen 80;
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:8086;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
3. 启用配置
执行:
ln -s /etc/nginx/sites-available/demo /etc/nginx/sites-enabled/
4. 测试 Nginx 配置
nginx -t
如果看到:
syntax is ok
test is successful
即可。
5. 重启 Nginx
systemctl restart nginx
八、测试反向代理
现在访问:
http://你的域名/demo
应该已经能访问 Tomcat 项目。
九、安装 HTTPS(Let's Encrypt)
我们使用:
Certbot
免费 HTTPS。
1. 安装 Certbot
执行:
apt install -y certbot python3-certbot-nginx
2. 自动申请 HTTPS
执行:
certbot --nginx
3. 按提示操作
它会问:
输入邮箱
Enter email address
输入你的邮箱。
同意协议
输入:
Y
选择域名
选择:
example.com
www.example.com
4. 自动完成 HTTPS
成功后会看到:
Congratulations!
十、现在你的网站已经 HTTPS 化
访问:
https://你的域名/demo
浏览器会显示:
🔒 安全锁。
十一、HTTPS 自动续期
Let's Encrypt 90 天有效。
但 Certbot 会自动续期。
测试:
certbot renew --dry-run
如果成功:
说明自动续期正常。
十二、最终 Nginx HTTPS 配置(自动生成)
Certbot 通常会自动生成:
server {
server_name example.com www.example.com;
location / {
proxy_pass http://127.0.0.1:8086;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
listen 443 ssl;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
十三、推荐生产环境优化(非常重要)
1. 增加上传大小限制
编辑:
vim /etc/nginx/nginx.conf
在 http {} 中增加:
client_max_body_size 200M;
否则上传大文件会:
413 Request Entity Too Large
2. 开启 gzip
在:
http {}
里增加:
gzip on;
gzip_types text/plain text/css application/json application/javascript;
3. 重启 Nginx
systemctl restart nginx
十四、推荐目录结构
/usr/local/tomcat
├── webapps
│ ├── demo.war
│ └── demo
├── logs
└── conf
十五、完整架构图
用户浏览器
↓
HTTPS :443
↓
Nginx
↓
http://127.0.0.1:8086
↓
Docker Tomcat9
↓
demo.war
十六、以后更新项目
只需:
docker restart tomcat9
Nginx 不需要动。
十七、后续升级(生产环境)
后续可以继续升级:
| 功能 | 推荐 |
|---|---|
| 数据库 | MySQL Docker |
| 缓存 | Redis |
| 自动部署 | Jenkins/GitHub Actions |
| 多容器 | Docker Compose |
| 高并发 | Nginx负载均衡 |
| 安全 | Fail2ban |
| 监控 | Prometheus + Grafana |
| 日志 | ELK |
| CDN | Cloudflare |
十八、最终生产环境结构建议
Internet
↓
Cloudflare(可选)
↓
Nginx + HTTPS
↓
Docker Tomcat9
↓
demo.war
↓
MySQL / Redis