通过配置SSL证书和反向代理,将HTTP服务升级为HTTPS,提供更安全的网络连接。以下是完整的部署流程:
一、查看服务器公网IP
确保你能够访问服务器并获取公网IP地址:
1.登录服务器
2.使用命令行工具查询
3.通过第三方服务验证
1.1 命令行查询方法
# 方法一:使用curl查询
curl ifconfig.me
curl ipinfo.io/ip
curl icanhazip.com
# 方法二:使用dig命令
dig +short myip.opendns.com @resolver1.opendns.com
# 方法三:使用wget
wget -qO- ifconfig.me
1.2 验证IP地址
# 检查IP是否正确
ping your_public_ip
# 测试端口连通性(以5001端口为例)
telnet your_public_ip 5001
二、域名解析配置
2.1 DNS记录配置
在你的域名服务商控制台中添加以下记录:
记录类型: A
主机记录: @ 或 www
记录值: 你的服务器公网IP
TTL: 600(10分钟)
2.2 验证域名解析
# 检查域名解析是否生效
nslookup your-domain.com
dig your-domain.com
# 测试域名连通性
ping your-domain.com
三、配置反向代理(Nginx)
3.1 安装Nginx
# Ubuntu系统
sudo apt update
sudo apt install nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
3.2 配置反向代理
创建Nginx配置文件:
sudo nano /etc/nginx/sites-available/your-domain
添加以下配置内容:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
location / {
proxy_pass http://localhost:5001;
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;
}
}
3.3 启用配置
# 创建软链接
sudo ln -s /etc/nginx/sites-available/your-domain /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重新加载配置
sudo systemctl reload nginx
四、使用Let’s Encrypt获取免费SSL证书
4.1 安装Certbot
# Ubuntu系统
sudo apt install certbot python3-certbot-nginx
4.2 获取SSL证书
# 自动配置SSL证书
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# 手动获取证书(如果自动配置失败)
sudo certbot certonly --nginx -d your-domain.com -d www.your-domain.com
4.3 验证证书
# 检查证书状态
sudo certbot certificates
# 测试证书续期
sudo certbot renew --dry-run
4.4 自动续期设置
# 添加定时任务
sudo crontab -e
# 添加以下行(每天检查一次)
0 12 * * * /usr/bin/certbot renew --quiet
五、手动配置SSL证书(详细说明)
5.1 准备SSL证书文件
如果你有自己的SSL证书,通常包含以下文件:
1.证书文件(.crt 或 .pem)
2.私钥文件(.key)
3.证书链文件(.ca-bundle 或 chain.pem)
4.完整证书文件(fullchain.pem)
5.2 上传证书文件
# 创建SSL证书目录
sudo mkdir -p /etc/nginx/ssl
# 上传证书文件(使用scp或其他方式)
sudo cp your-certificate.crt /etc/nginx/ssl/
sudo cp your-private.key /etc/nginx/ssl/
sudo cp your-ca-bundle.crt /etc/nginx/ssl/
# 设置文件权限
sudo chmod 600 /etc/nginx/ssl/your-private.key
sudo chmod 644 /etc/nginx/ssl/your-certificate.crt
sudo chmod 644 /etc/nginx/ssl/your-ca-bundle.crt
5.3 合并证书链
# 创建完整证书文件
sudo cat /etc/nginx/ssl/your-certificate.crt /etc/nginx/ssl/your-ca-bundle.crt > /etc/nginx/ssl/fullchain.pem
5.4 配置Nginx SSL
修改Nginx配置文件:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL证书配置
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/your-private.key;
# SSL安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# HSTS安全头
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://localhost:5001;
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;
proxy_set_header X-Forwarded-Port $server_port;
}
}
5.5 验证SSL配置
# 测试Nginx配置
sudo nginx -t
# 重新加载配置
sudo systemctl reload nginx
# 测试SSL证书
openssl s_client -connect your-domain.com:443 -servername your-domain.com
六、防火墙端口配置(Ubuntu)
6.1 检查防火墙状态
# 查看防火墙状态
sudo ufw status
# 如果防火墙未启用,先启用
sudo ufw enable
6.2 开放必要端口
# 开放HTTP端口(80)
sudo ufw allow 80/tcp
# 开放HTTPS端口(443)
sudo ufw allow 443/tcp
# 开放你的应用端口(5001)
sudo ufw allow 5001/tcp
# 开放SSH端口(如果需要远程管理)
sudo ufw allow 22/tcp
6.3 验证端口开放
# 查看开放的端口
sudo ufw status numbered
# 检查端口监听状态
sudo netstat -tlnp | grep :5001
sudo netstat -tlnp | grep :80
sudo netstat -tlnp | grep :443
# 使用ss命令检查
sudo ss -tlnp | grep :5001
6.4 测试端口连通性
# 本地测试
curl -I http://localhost:5001
curl -I https://your-domain.com
# 外部测试(从其他机器)
telnet your-domain.com 80
telnet your-domain.com 443
七、完整部署验证
7.1 服务状态检查
# 检查Nginx状态
sudo systemctl status nginx
# 检查你的应用服务状态
sudo systemctl status your-app-service
# 查看Nginx访问日志
sudo tail -f /var/log/nginx/access.log
# 查看Nginx错误日志
sudo tail -f /var/log/nginx/error.log
7.2 SSL证书验证
# 在线SSL检测工具
# 访问:https://www.ssllabs.com/ssltest/
# 输入你的域名进行检测
# 命令行验证
curl -I https://your-domain.com
openssl s_client -connect your-domain.com:443 -servername your-domain.com < /dev/null
八、常见问题排查
8.1 域名解析问题
1.检查DNS记录是否正确配置
2.等待DNS传播(通常需要几分钟到几小时)
3.清除本地DNS缓存
4.使用不同的DNS服务器测试
8.2 SSL证书问题
1.检查证书文件路径是否正确
2.验证证书和私钥是否匹配
3.确认证书链是否完整
4.检查证书是否过期
8.3 反向代理问题
1.确认后端服务正常运行
2.检查代理配置是否正确
3.验证防火墙规则
4.查看Nginx错误日志
九、安全优化建议
9.1 SSL安全配置
# 在Nginx配置中添加安全头
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
9.2 定期维护
1.定期更新SSL证书
2.监控证书过期时间
3.定期检查安全配置
4.保持系统和软件更新
通过以上步骤,你就可以成功将HTTP服务升级为HTTPS,为用户提供更安全的访问体验!
如果在配置过程中遇到问题,可以查看相关日志文件或者在评论区留言交流。