通过配置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,为用户提供更安全的访问体验!

如果在配置过程中遇到问题,可以查看相关日志文件或者在评论区留言交流。