DeOldify服务HTTPS化:Nginx+Let‘s Encrypt免费证书配置指南

发布时间:2026/7/18 15:03:20

DeOldify服务HTTPS化:Nginx+Let‘s Encrypt免费证书配置指南 DeOldify服务HTTPS化NginxLets Encrypt免费证书配置指南1. 为什么需要给DeOldify服务加上HTTPS你可能已经成功部署了DeOldify图像上色服务通过那个简单的Web界面把家里的老照片一张张变成了彩色。但不知道你有没有注意到浏览器地址栏里显示的是http://而不是https://旁边可能还有个不安全的提示。这就像你家的门没锁一样虽然平时可能没事但总让人心里不踏实。特别是当你上传一些私人的家庭照片时在公共WiFi下使用服务想把服务分享给朋友或客户使用需要集成到其他正式应用中HTTP的问题在哪里简单说数据在传输过程中是裸奔的。如果有人在你和服务器之间监听就能看到你上传的图片内容甚至可能篡改返回的结果。HTTPS能解决什么加密传输图片数据在传输过程中被加密别人截获了也看不懂身份验证确保你连接的是真正的服务器不是假冒的数据完整性保证图片在传输过程中没有被修改浏览器信任不再有不安全的警告用户体验更好最棒的是现在我们可以用Lets Encrypt免费获得SSL证书配合Nginx反向代理零成本实现HTTPS化。整个过程就像给房子装锁一样花点时间配置以后就安全多了。2. 准备工作检查你的DeOldify服务环境在开始配置HTTPS之前我们先确认一下基础环境。打开终端按照下面的步骤检查2.1 确认DeOldify服务正常运行# 检查服务状态 curl http://localhost:7860/health # 预期看到这样的响应 # { # service: cv_unet_image-colorization, # status: healthy, # model_loaded: true # }如果看到healthy状态说明DeOldify服务运行正常。记下这个端口号7860等会儿配置Nginx时会用到。2.2 检查服务器基本信息# 查看系统版本 cat /etc/os-release # 查看是否安装了Nginx nginx -v 2/dev/null || echo Nginx未安装 # 查看是否安装了Python3 python3 --version # 查看是否有域名如果没有需要先准备一个 hostname -I重要提示要使用Lets Encrypt的免费证书你需要有一个域名。可以是自己注册的域名如yourdomain.com免费的二级域名如xxx.duckdns.org云服务商提供的域名如果没有域名HTTPS证书无法申请。但别担心即使没有域名本文的后半部分也会教你如何用自签名证书在本地测试。2.3 确保服务器有公网IP可选但推荐如果你的服务只在局域网内使用可以跳过这一步。但如果想让外网访问需要有公网IP联系网络服务商获取配置端口转发在路由器设置中将7860端口转发到服务器域名解析将域名指向你的公网IP3. 安装和配置Nginx反向代理Nginx在这里扮演门卫的角色对外提供HTTPS服务对内把请求转发给DeOldify。这样既安全又不影响原有服务。3.1 安装Nginx# Ubuntu/Debian系统 sudo apt update sudo apt install nginx -y # CentOS/RHEL系统 sudo yum install epel-release -y sudo yum install nginx -y # 启动Nginx并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 检查Nginx状态 sudo systemctl status nginx看到active (running)就说明安装成功了。现在打开浏览器访问http://你的服务器IP应该能看到Nginx的欢迎页面。3.2 配置Nginx反向代理现在我们来创建DeOldify的Nginx配置文件# 创建配置文件 sudo nano /etc/nginx/sites-available/deoldify把下面的配置内容复制进去注意修改第3行的域名server { listen 80; server_name yourdomain.com; # 改成你的域名 # 重定向所有HTTP请求到HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; # 改成你的域名 # SSL证书路径先留空申请证书后会填充 # ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # SSL优化配置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; ssl_prefer_server_ciphers off; # 安全头部 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock; # 反向代理到DeOldify服务 location / { proxy_pass http://localhost:7860; 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; # WebSocket支持如果未来需要 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } # 静态文件缓存如果有的话 location /static/ { alias /path/to/static/files/; expires 30d; add_header Cache-Control public, immutable; } # 访问日志 access_log /var/log/nginx/deoldify_access.log; error_log /var/log/nginx/deoldify_error.log; }关键配置解释listen 80监听HTTP端口然后重定向到HTTPSlisten 443 ssl监听HTTPS端口proxy_pass http://localhost:7860把请求转发给DeOldify服务那些proxy_set_header是为了让DeOldify知道真实的客户端信息保存文件后启用这个配置# 创建符号链接 sudo ln -s /etc/nginx/sites-available/deoldify /etc/nginx/sites-enabled/ # 测试Nginx配置语法 sudo nginx -t # 如果看到test is successful重启Nginx sudo systemctl reload nginx现在Nginx已经配置好了但还没有SSL证书所以HTTPS还无法使用。别急下一步我们就来解决证书问题。4. 申请Lets Encrypt免费SSL证书Lets Encrypt是一个非盈利的证书颁发机构提供免费的SSL证书每90天需要续期一次。我们用Certbot工具来自动化这个过程。4.1 安装Certbot# Ubuntu/Debian系统 sudo apt update sudo apt install certbot python3-certbot-nginx -y # CentOS/RHEL系统需要先启用EPEL sudo yum install epel-release -y sudo yum install certbot python3-certbot-nginx -y4.2 申请证书有域名的情况前提条件域名已经解析到你的服务器IPDNS生效需要时间通常几分钟到几小时服务器的80端口可以从外网访问Lets Encrypt需要验证域名所有权# 申请证书替换yourdomain.com为你的域名 sudo certbot --nginx -d yourdomain.com # 如果是多个域名或子域名 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com -d api.yourdomain.comCertbot会引导你完成整个过程输入邮箱用于接收证书到期提醒同意服务条款输入A然后回车是否订阅邮件根据喜好选择通常选N自动配置NginxCertbot会自动修改Nginx配置如果一切顺利你会看到这样的成功信息Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/yourdomain.com/fullchain.pem /etc/letsencrypt/live/yourdomain.com/privkey.pem Your certificate will expire on 2024-05-20.4.3 验证证书是否生效# 检查证书文件 sudo ls -la /etc/letsencrypt/live/yourdomain.com/ # 应该看到这些文件 # cert.pem - 证书 # chain.pem - 中间证书 # fullchain.pem - 完整证书链我们用的这个 # privkey.pem - 私钥现在打开浏览器访问https://yourdomain.com应该能看到地址栏显示锁图标点击锁图标能看到证书信息正常显示DeOldify的Web界面4.4 没有域名怎么办使用自签名证书如果你只是在本地测试或者暂时没有域名可以用自签名证书。虽然浏览器会有警告但加密功能是完整的。# 创建证书目录 sudo mkdir -p /etc/nginx/ssl # 生成自签名证书有效期365天 sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/selfsigned.key \ -out /etc/nginx/ssl/selfsigned.crt \ -subj /CCN/STBeijing/LBeijing/ODeOldify/CNlocalhost # 修改Nginx配置使用自签名证书 sudo nano /etc/nginx/sites-available/deoldify找到SSL证书配置部分修改为ssl_certificate /etc/nginx/ssl/selfsigned.crt; ssl_certificate_key /etc/nginx/ssl/selfsigned.key;然后重启Nginxsudo nginx -t sudo systemctl reload nginx访问https://localhost时浏览器会显示不安全警告点击高级→继续前往即可。这适合内部测试使用。5. 优化Nginx和SSL配置拿到证书只是第一步要让HTTPS既安全又高效还需要一些优化配置。5.1 更新Nginx配置使用SSL证书Certbot通常会自动更新Nginx配置但为了完整我们看看最终的配置应该是什么样sudo nano /etc/nginx/sites-available/deoldify确认SSL部分已经自动更新类似这样server { listen 80; server_name yourdomain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name yourdomain.com; # Certbot自动添加的证书路径 ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # 其他配置保持不变... }5.2 添加SSL安全强化配置在Nginx的SSL配置部分添加这些安全优化# SSL会话设置 ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # 现代加密套件 ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; # DH参数增强前向安全性 ssl_dhparam /etc/nginx/dhparam.pem; # HSTS强制使用HTTPS add_header Strict-Transport-Security max-age63072000; includeSubDomains; preload always; # OCSP装订提高SSL握手速度 ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/chain.pem;生成DH参数文件这需要一些时间sudo openssl dhparam -out /etc/nginx/dhparam.pem 20485.3 性能优化配置图片上色服务可能会处理大文件我们需要调整一些Nginx参数# 在server块内添加 client_max_body_size 50M; # 允许上传最大50MB的图片 proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 启用gzip压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/json application/javascript application/xmlrss application/atomxml image/svgxml;5.4 最终测试应用所有配置# 测试配置 sudo nginx -t # 重启Nginx sudo systemctl reload nginx # 检查SSL配置 sudo certbot certificates用在线工具检查SSL配置质量访问https://www.ssllabs.com/ssltest/analyze.html?dyourdomain.com目标是达到A或A评级。6. 自动化证书续期Lets Encrypt证书只有90天有效期但我们可以设置自动续期完全不用手动管理。6.1 测试续期功能# 测试续期不会真的续期只是检查 sudo certbot renew --dry-run如果看到Congratulations, all renewals succeeded之类的信息说明自动续期配置正常。6.2 设置定时任务自动续期Certbot安装时通常已经创建了定时任务但我们可以确认一下# 查看现有的定时任务 sudo systemctl list-timers | grep certbot # 或者查看cron任务 sudo cat /etc/cron.d/certbot如果没有自动配置可以手动添加# 编辑crontab sudo crontab -e # 添加这行每天凌晨2点检查续期 0 2 * * * /usr/bin/certbot renew --quiet --post-hook systemctl reload nginx续期原理证书到期前30天会自动续期续期后自动重载Nginx配置整个过程无需人工干预6.3 监控证书状态我们可以创建一个简单的监控脚本# 创建监控脚本 sudo nano /usr/local/bin/check_ssl.sh#!/bin/bash DOMAINyourdomain.com DAYS_REMAINING$(echo | openssl s_client -servername $DOMAIN -connect $DOMAIN:443 2/dev/null | openssl x509 -noout -dates | grep -i after | cut -d -f2) EXPIRY_DATE$(date -d $DAYS_REMAINING %s) CURRENT_DATE$(date %s) DAYS_LEFT$(( (EXPIRY_DATE - CURRENT_DATE) / 86400 )) if [ $DAYS_LEFT -lt 30 ]; then echo 警告: $DOMAIN 的SSL证书将在 $DAYS_LEFT 天后过期 # 可以在这里添加邮件通知或Slack通知 else echo 正常: $DOMAIN 的SSL证书还有 $DAYS_LEFT 天有效期 fi# 给脚本执行权限 sudo chmod x /usr/local/bin/check_ssl.sh # 测试脚本 /usr/local/bin/check_ssl.sh # 添加到cron每周检查一次 echo 0 9 * * 1 /usr/local/bin/check_ssl.sh | sudo tee -a /etc/crontab7. 更新DeOldify客户端配置服务端配置好了HTTPS客户端也需要相应调整。这里提供几个常见场景的更新方法。7.1 更新Python API调用代码如果你之前用Python调用DeOldify的HTTP接口现在需要改为HTTPSimport requests import base64 from PIL import Image from io import BytesIO # 之前是HTTP # SERVICE_URL http://yourdomain.com:7860 # 现在改为HTTPS注意端口改为443或省略 SERVICE_URL https://yourdomain.com def colorize_image_secure(image_path): 使用HTTPS给图片上色 with open(image_path, rb) as f: files {image: f} # 如果是自签名证书需要添加verifyFalse # response requests.post(f{SERVICE_URL}/colorize, filesfiles, verifyFalse) # Lets Encrypt证书是受信任的直接使用 response requests.post(f{SERVICE_URL}/colorize, filesfiles) result response.json() if result[success]: img_data base64.b64decode(result[output_img_base64]) img Image.open(BytesIO(img_data)) output_path image_path.replace(., _colored.) img.save(output_path) print(f上色完成: {output_path}) return output_path else: print(f上色失败: {result}) return None # 使用示例 colorize_image_secure(old_photo.jpg)7.2 处理SSL证书验证问题在某些环境下可能需要特殊处理SSL证书import requests import ssl import certifi # 方法1使用系统证书推荐 response requests.post(url, filesfiles) # 方法2指定自定义CA证书 response requests.post( url, filesfiles, verify/path/to/custom/ca-bundle.crt ) # 方法3临时跳过验证仅测试用不安全 response requests.post(url, filesfiles, verifyFalse) # 方法4使用certifi的证书 response requests.post(url, filesfiles, verifycertifi.where())7.3 更新Web界面访问地址告诉你的用户新的访问地址# DeOldify图像上色服务更新通知 ## 新访问地址 **安全访问**https://yourdomain.com ## 变化说明 1. **更安全**所有图片传输都经过加密 2. **无警告**浏览器不再显示不安全提示 3. **自动跳转**访问http地址会自动跳转到https ## 客户端更新 如果你通过API调用服务请将 http://yourdomain.com:7860 改为 https://yourdomain.com8. 故障排除和常见问题即使按照步骤操作也可能会遇到一些问题。这里整理了一些常见问题的解决方法。8.1 证书申请失败问题sudo certbot --nginx -d yourdomain.com失败可能原因和解决# 1. 域名解析问题 ping yourdomain.com nslookup yourdomain.com # 2. 80端口被占用 sudo netstat -tlnp | grep :80 # 3. 防火墙阻止 sudo ufw status sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 4. 之前申请过证书需要清理 sudo certbot delete --cert-name yourdomain.com # 5. 使用备用验证方式如果80端口不能用 sudo certbot certonly --standalone -d yourdomain.com8.2 HTTPS无法访问问题配置后无法通过HTTPS访问排查步骤# 1. 检查Nginx错误日志 sudo tail -f /var/log/nginx/error.log # 2. 检查证书文件权限 sudo ls -la /etc/letsencrypt/live/yourdomain.com/ # 3. 检查Nginx配置 sudo nginx -t # 4. 检查端口监听 sudo netstat -tlnp | grep :443 # 5. 手动测试SSL握手 echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com8.3 混合内容警告问题HTTPS页面加载了HTTP资源浏览器显示不安全解决确保所有资源都使用HTTPS# 在Nginx配置中添加 proxy_set_header X-Forwarded-Proto $scheme; # 如果DeOldify服务返回HTTP链接可以重写 sub_filter http:// https://; sub_filter_once off;8.4 性能问题问题启用HTTPS后速度变慢优化建议# 1. 启用HTTP/2 listen 443 ssl http2; # 2. 启用SSL会话复用 ssl_session_cache shared:SSL:50m; ssl_session_timeout 1d; # 3. 启用OCSP装订 ssl_stapling on; ssl_stapling_verify on; # 4. 使用更快的加密套件 ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;8.5 证书续期失败问题自动续期失败手动续期# 停止Nginx释放80端口 sudo systemctl stop nginx # 使用standalone模式续期 sudo certbot renew --standalone # 重启Nginx sudo systemctl start nginx # 检查新证书 sudo certbot certificates9. 安全加固建议HTTPS只是安全的第一步这里还有一些额外的安全建议。9.1 限制访问权限# 只允许特定IP访问如果有管理界面 location /admin/ { allow 192.168.1.0/24; # 内网 allow 203.0.113.1; # 特定公网IP deny all; proxy_pass http://localhost:7860; } # 限制请求频率防止滥用 limit_req_zone $binary_remote_addr zoneapi:10m rate10r/s; location /colorize { limit_req zoneapi burst20 nodelay; proxy_pass http://localhost:7860; }9.2 隐藏服务器信息# 隐藏Nginx版本 server_tokens off; # 隐藏其他头信息 proxy_hide_header X-Powered-By; proxy_hide_header Server;9.3 定期更新和监控# 定期更新软件 sudo apt update sudo apt upgrade -y # 监控SSL证书过期 sudo certbot renew --dry-run # 检查安全配置 sudo nginx -t sudo systemctl status nginx9.4 备份配置和证书# 创建备份脚本 sudo nano /usr/local/bin/backup_ssl.sh#!/bin/bash BACKUP_DIR/backup/ssl_$(date %Y%m%d) mkdir -p $BACKUP_DIR # 备份证书 cp -r /etc/letsencrypt/live/ $BACKUP_DIR/ cp -r /etc/letsencrypt/archive/ $BACKUP_DIR/ # 备份Nginx配置 cp -r /etc/nginx/ $BACKUP_DIR/nginx_config/ # 压缩备份 tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR # 清理临时文件 rm -rf $BACKUP_DIR echo 备份完成: $BACKUP_DIR.tar.gzsudo chmod x /usr/local/bin/backup_ssl.sh # 每月备份一次 echo 0 2 1 * * /usr/local/bin/backup_ssl.sh | sudo tee -a /etc/crontab10. 总结给DeOldify图像上色服务配置HTTPS就像给家里的门装了一把好锁。整个过程可以分为几个关键步骤10.1 配置回顾安装Nginx作为反向代理和安全网关申请Lets Encrypt证书免费、自动化的SSL证书配置Nginx使用HTTPS将HTTP流量重定向到HTTPS优化安全配置启用HTTP/2、HSTS、现代加密套件设置自动续期证书90天自动更新无需人工干预更新客户端配置确保所有调用都使用HTTPS10.2 带来的好处安全性提升图片数据加密传输防止窃听和篡改用户体验改善浏览器不再显示不安全警告专业度提升HTTPS已成为现代Web服务的标配SEO优势搜索引擎对HTTPS网站有排名加成未来兼容性为后续添加更多功能打下基础10.3 维护建议定期检查每月检查一次证书状态和Nginx日志及时更新保持Nginx和Certbot为最新版本监控告警设置证书过期提醒提前30天备份配置修改配置前做好备份10.4 最后一步测试完成所有配置后运行这个完整的测试脚本#!/bin/bash echo DeOldify HTTPS配置测试 echo # 测试1: 服务健康检查 echo 1. 测试DeOldify服务... curl -s https://yourdomain.com/health | python3 -m json.tool echo # 测试2: SSL证书检查 echo 2. 测试SSL证书... echo | openssl s_client -connect yourdomain.com:443 -servername yourdomain.com 2/dev/null | openssl x509 -noout -dates echo # 测试3: HTTP重定向 echo 3. 测试HTTP重定向到HTTPS... curl -I http://yourdomain.com 2/dev/null | grep Location echo # 测试4: 实际功能测试 echo 4. 测试图片上色功能... curl -X POST https://yourdomain.com/colorize \ -F imagetest.jpg 2/dev/null | grep -o success:[^,]* echo echo 测试完成 如果所有测试都通过恭喜你你的DeOldify服务现在已经是一个安全的、专业的HTTPS服务了。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻