当前位置: 首页 > news >正文

生成https免费证书并绑定到nginx

环境说明

我是docker安装的nginx,映射目录要注意一下 才可以签发证书

安装步骤和命令 注意顺序

1.安装 Certbot 客户端

sudo yum install epel-releasesudo yum install certbot
# 如果你是 CentOS 8/Stream,可能需要安装 python3-certbot
# sudo yum install certbot python3-certbot

 2.手动生成证书

我们将使用 webroot 模式来生成证书,这意味着 Certbot 会在你的网站根目录下放置临时文件进行验证。

  1. 为验证文件创建临时目录: 在宿主机上创建一个用于 Certbot 验证的临时目录。这个目录需要能被宿主机上的 Certbot 访问,并且能够通过 Nginx 的 80 端口对外提供服务。

    sudo mkdir -p /var/www/certbot
  2. 修改 Nginx 容器配置(重要!): 为了让 Certbot 能够验证你的域名,你需要确保 Nginx 容器的 80 端口被正确映射到宿主机,并且 Nginx 能够服务 Certbot 放置的验证文件。

    示例 nginx.conf (Nginx 容器内的配置): 在 Nginx 的 HTTP server block 中添加一个专门用于 Certbot 验证的 location 块。

    server {listen 80;listen [::]:80;server_name yourdomain.com www.yourdomain.com; # 替换成你的域名# Certbot 验证路径location /.well-known/acme-challenge/ {root /var/www/certbot; # 注意:这个路径是 Nginx 容器内部的路径}# 其他网站内容location / {root /usr/share/nginx/html; # 你的网站实际文件路径index index.html index.htm;try_files $uri $uri/ =404;}
    }

    示例 docker-compose.yml (或 docker run 命令): 你需要将宿主机上刚才创建的 /var/www/certbot 目录挂载到 Nginx 容器内部的 /var/www/certbot 路径。yml文件

    version: '3.8'
    services:nginx:image: nginx:latestcontainer_name: my-nginxports:- "80:80"- "443:443"volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro  # 挂载你的 Nginx 配置- /var/www/certbot:/var/www/certbot:ro   # 挂载 Certbot 验证目录- ./html:/usr/share/nginx/html:ro        # 你的网站内容# 将来我们会把证书挂载到这里# - /etc/letsencrypt:/etc/letsencrypt:rorestart: unless-stopped

    证书文件通常位于 /etc/letsencrypt/live/yourdomain.com/ 目录下。

  3. 配置 Nginx 使用 HTTPS 证书
    现在你已经有了证书文件,可以修改 Nginx 容器的配置来启用 HTTPS。
    1).修改 docker-compose.yml (或 docker run),挂载证书目录: 你需要将宿主机上的 Certbot 证书目录挂载到 Nginx 容器内部,以便 Nginx 能够访问它们。
     

    version: '3.8'
    services:nginx:image: nginx:latestcontainer_name: my-nginxports:- "80:80"- "443:443"volumes:- ./nginx.conf:/etc/nginx/nginx.conf:ro- /var/www/certbot:/var/www/certbot:ro   # 保留这个用于续期- ./html:/usr/share/nginx/html:ro- /etc/letsencrypt:/etc/letsencrypt:ro   # **新增:挂载 Certbot 证书目录**restart: unless-stopped

    注意:我们挂载了整个 /etc/letsencrypt 目录,这样 Nginx 就可以访问 live 目录下的证书

    2).修改 Nginx 容器内的 nginx.conf: 在你的 Nginx 配置文件中,添加或修改 HTTPS server block。
     

    server {listen 80;listen [::]:80;server_name yourdomain.com www.yourdomain.com;# HTTP 重定向到 HTTPS (推荐)return 301 https://$host$request_uri;
    }server {listen 443 ssl http2;listen [::]:443 ssl http2;server_name yourdomain.com www.yourdomain.com;ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; # Nginx 容器内的路径ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # Nginx 容器内的路径# 推荐的 SSL 配置 (根据你的 Nginx 版本和需求可能有所不同)ssl_session_cache shared:SSL:10m;ssl_session_timeout 1d;ssl_session_tickets off;ssl_protocols TLSv1.2 TLSv1.3;ssl_prefer_server_ciphers off;ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256";# OCSP Staplingssl_stapling on;ssl_stapling_verify on;resolver 8.8.8.8 8.8.4.4 valid=300s; # Google DNS,可以替换为你偏好的 DNS 解析器resolver_timeout 5s;root /usr/share/nginx/html; # 你的网站实际文件路径index index.html index.htm;location / {try_files $uri $uri/ =404;}# 保护 Certbot 验证目录,使其不会被 Nginx 容器的服务流量影响location /.well-known/acme-challenge/ {root /var/www/certbot; # 保持此配置以备续期allow all;}
    }


     

  4. 重新启动 Nginx 容器

    docker-compose restart  或者   docker restart  容器id

  5. 验证 HTTPS 配置
    现在,打开你的浏览器,访问 https://yourdomain.com。你应该能看到一个安全的小锁图标,并且所有 HTTP 请求都自动重定向到了 HTTPS。

        

相关文章:

  • 嵌入式之硬件学习(三)通信方式、串口通信
  • RK3568笔记八十四:rtmp转rtmp直播流测试
  • 亚矩阵云手机+Whatnot:直播电商的自动化增长引擎
  • iOS多端兼容性调试:一次iOS性能优化分工具协作排查过程
  • 上线iOSApp前抓包工具协作保障接口行为一致性(iOS抓包)
  • spring-webmvc @InitBinder 典型用法
  • 《前端面试题:数组操作》
  • PID控制电机
  • springboot入门之路(二)
  • 技术赋能教师专业发展:从理论到实践的深度剖析
  • createInnerAudioContext播放不完整?
  • 榕壹云外卖跑腿系统:基于Spring Boot的开源生活服务平台技术解析
  • STM32 GPIO 寄存器开发
  • OCCT基础类库介绍:Modeling Algorithm - Topological Tools
  • 今天我想清楚了
  • 无需公网IP:Termux+手机+内网穿透实现Minecraft远程多人联机
  • 基于大数据技术的在UGC数据分析与路线推荐的研究
  • ArcGIS中利用泰森多边形法分析站点与流域占比
  • VTK知识学习(54)- 交互与Widget(五)
  • ES 索引加载 vs BulkLoad
  • 新准则中公司网站建设费用计入什么科目/百度seo排名优化软件化
  • 网站后台怎样批量上传/b站视频推广网站
  • 如何做微信电子书下载网站/做网站多少钱
  • 上海大型网站建设公司排名/交换友情链接
  • 网站备案是域名备案还是服务器备案/知乎小说推广对接平台
  • 郑州做景区网站建设公司/新闻联播今日新闻