Nginx-Https证书配置

一、引言:HTTPS------现代网站的"标配"与"刚需"

还在用 HTTP 裸奔?你的网站可能正面临以下风险:

  • 数据被窃听:用户密码、支付信息在传输中明文可见。
  • 中间人攻击:黑客可以篡改你的网页内容,植入恶意代码。
  • 浏览器警告:Chrome、Firefox 等主流浏览器会将 HTTP 网站标记为"不安全",严重影响用户体验和信任度。
  • SEO劣势:Google 等搜索引擎明确表示优先收录 HTTPS 网站。

好消息是,免费的 SSL/TLS 证书(如 Let's Encrypt)让 HTTPS 的普及变得前所未有的简单。本文将带你从申请证书到 Nginx 配置,再到安全加固,一站式搞定 HTTPS!

💡 核心价值

掌握 Nginx HTTPS 配置,是保护用户数据、提升网站可信度和 SEO 排名的基石


二、准备工作:获取你的 SSL 证书

选择证书类型

对于绝大多数个人博客、企业官网和小型应用,DV(域名验证)型免费证书完全够用。

推荐方案

  • Let's Encrypt:全球最流行的免费 CA,证书有效期 90 天,支持自动化续期。
  • 云服务商免费证书:阿里云、腾讯云等也提供一年期的免费 DV 证书,申请流程更图形化。

使用 Certbot 自动化申请(以 Let's Encrypt 为例)

Certbot 是官方推荐的 ACME 协议客户端,能自动完成证书申请、验证和部署。

步骤 1:安装 Certbot
bash 复制代码
# Ubuntu/Debian
sudo apt update
sudo apt install -y certbot python3-certbot-nginx

# CentOS/RHEL (需先启用EPEL)
sudo yum install -y epel-release
sudo yum install -y certbot python3-certbot-nginx
步骤 2:运行 Certbot 获取并安装证书
bash 复制代码
# Certbot 会自动修改你的 Nginx 配置
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com

按照提示操作,Certbot 会:

  1. 验证你对域名的控制权(通过在网站根目录放置一个临时文件)。
  2. 从 Let's Encrypt 服务器获取证书。
  3. 自动修改你的 Nginx 配置文件,添加 HTTPS 相关设置。
  4. 设置一个 cronsystemd 定时任务,用于自动续期(证书到期前 30 天)。

恭喜 !如果你看到 Congratulations! 的提示,你的网站已经可以通过 https://yourdomain.com 访问了!


三、手动配置 Nginx(理解原理)

即使使用了 Certbot,理解背后的配置逻辑也至关重要。假设你已将证书文件上传到服务器:

  • 证书文件/etc/ssl/certs/yourdomain.com.pem (或 .crt)
  • 私钥文件/etc/ssl/private/yourdomain.com.key

基础 Nginx 配置

编辑你的站点配置文件(通常位于 /etc/nginx/sites-available/yourdomain/etc/nginx/conf.d/yourdomain.conf):

复制代码
# 强制 HTTP 跳转到 HTTPS (最佳实践)
server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS 服务配置
server {
    listen 443 ssl http2; # 启用 HTTP/2
    server_name yourdomain.com www.yourdomain.com;

    # SSL 证书配置
    ssl_certificate /etc/ssl/certs/yourdomain.com.pem;
    ssl_certificate_key /etc/ssl/private/yourdomain.com.key;

    # 根目录和索引文件
    root /var/www/yourdomain;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

关键指令说明

  • listen 443 ssl http2;: 监听 443 端口,启用 SSL,并开启 HTTP/2 协议(性能更好)。
  • ssl_certificate : 指向你的公钥证书文件(.pem.crt)。
  • ssl_certificate_key : 指向你的私钥文件(.key)。
  • return 301 ...: 将所有 HTTP 请求永久重定向到 HTTPS,确保用户始终使用加密连接。

四、安全加固:让你的 HTTPS 更安全

基础配置只是开始。为了抵御更高级的攻击,我们需要进行安全加固。

1. 配置强加密套件

server 块中加入以下配置,禁用老旧、不安全的协议和加密算法。

复制代码
# 禁用不安全的 SSL 协议
ssl_protocols TLSv1.2 TLSv1.3; # 只允许 TLS 1.2 和 1.3

# 配置加密套件 (Cipher Suites)
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;

2. 启用 HSTS(HTTP Strict Transport Security)

HSTS 是一个安全策略机制,它告诉浏览器在未来的请求中强制使用 HTTPS ,即使用户手动输入 http://

复制代码
# 在 server 块中添加
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
  • max-age: 浏览器记住此策略的时间(秒),这里设置为 2 年。
  • includeSubDomains: 将策略应用到所有子域名。
  • preload: 允许你的域名被加入浏览器的 HSTS 预加载列表(需额外申请)。

3. 配置 OCSP Stapling

OCSP Stapling 可以提升 TLS 握手速度,并增强隐私(避免浏览器直接向 CA 查询证书状态)。

复制代码
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s; # 使用 Google DNS
resolver_timeout 5s;

五、验证与测试

配置完成后,务必进行验证:

  1. 访问网站 :在浏览器中打开 https://yourdomain.com,检查地址栏是否出现安全锁标志。
  2. 在线检测工具
    • SSL Labs' SSL Test:最权威的 HTTPS 配置检测工具,会给出详细的安全评级(目标是 A+)。
    • Why No Padlock?:帮助排查混合内容(HTTP 资源嵌入 HTTPS 页面)等问题。

六、结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关推荐
爱喝热水的呀哈喽1 小时前
多轮对话 gpt‘
运维·windows·python
乐维_lwops1 小时前
落地实测|运维监控深度测评
运维
REDcker2 小时前
Linux文件IO底层原理详解
linux·运维·spring
为思念酝酿的痛2 小时前
线程同步与互斥
linux·运维·服务器·后端
一条代码鱼2 小时前
Linux 文件实时同步完全指南:Lsyncd vs Inotifywait+Rsync
linux·运维·服务器
艾莉丝努力练剑2 小时前
【Linux网络】Linux 网络编程:传输层协议TCP(三)
linux·运维·服务器·网络·tcp/ip·http
小程故事多_802 小时前
从想法到落地零返工,AI Agent六阶段自动化开发全流水线实践
运维·人工智能·自动化
keyipatience2 小时前
21,22 (半)深入理解Linux重定向与缓冲区机制
linux·运维·服务器
风向决定发型丶2 小时前
Logrotate配置nginx日志切割
运维·nginx