在网站开发中,数据传输的安全性越来越重要。如果你的网站还在使用普通的HTTP协议,用户的账号密码、浏览数据等可能会被中间人窃取。HTTPS(HTTP Secure)通过SSL/TLS加密技术,让数据在传输过程中被加密,大大提升了网站的安全性。同时,搜索引擎也更青睐HTTPS网站,现在浏览器访问HTTP网站还会显示“不安全”提示,影响用户信任。因此,给网站配置HTTPS是必备技能。

一、获取SSL证书

要配置HTTPS,首先需要SSL证书。推荐使用Let’s Encrypt免费证书,它由非盈利组织提供,有效期90天,支持自动续期,适合个人和小型网站。获取证书需借助Certbot工具,步骤如下:

1. 安装Certbot

在Ubuntu/Debian系统中,执行以下命令安装Certbot及Nginx插件:

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. 获取并安装证书

运行Certbot命令,指定你的域名(例如example.comwww.example.com):

sudo certbot --nginx -d example.com -d www.example.com
  • --nginx:Certbot会自动修改Nginx配置,无需手动操作。
  • -d:指定需要加密的域名,多个域名用逗号分隔。

执行后,Certbot会自动验证域名所有权,下载证书,并修改Nginx配置(包括自动配置HTTP到HTTPS的重定向)。

二、验证证书安装

安装完成后,Certbot会输出成功信息,可通过以下方式验证:
- 查看证书状态:运行certbot certificates,可看到证书路径(如/etc/letsencrypt/live/example.com/)。
- 访问网站:打开浏览器访问https://example.com,地址栏会出现小锁图标,点击锁图标可查看证书详情,确认颁发者为Let’s Encrypt。

三、Nginx配置详解

Certbot已自动修改Nginx配置,但了解核心参数有助于排查问题。默认情况下,Nginx配置文件会添加两个关键部分:

1. 监听443端口并启用HTTPS

在Nginx的站点配置文件中(通常在/etc/nginx/sites-available/yourdomain.com),会看到类似以下内容:

server {
    listen 443 ssl;  # 监听HTTPS的443端口
    server_name example.com www.example.com;  # 你的域名

    # SSL证书和私钥路径(Certbot自动生成)
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    # 可选:加密协议和套件(Certbot默认已优化,新手可忽略)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384';
}

2. HTTP自动重定向到HTTPS

为了让用户访问http://example.com时自动跳转到https://example.com,Certbot会在80端口的配置中添加重定向:

server {
    listen 80;  # 监听HTTP的80端口
    server_name example.com www.example.com;

    # 重定向到HTTPS(301永久重定向)
    return 301 https://$host$request_uri;
}

四、配置验证与重启

修改完Nginx配置后,需验证语法并重启服务:
1. 检查配置语法:运行nginx -t,若输出nginx: configuration file /etc/nginx/nginx.conf test is successful,说明配置无误。
2. 重启Nginx:执行sudo systemctl restart nginx(或service nginx restart)。

五、常见问题及解决方法

  1. 证书路径错误:运行certbot certificates检查证书路径,确保与Nginx配置中的路径一致。
  2. 权限不足:Nginx进程(通常是www-data)需读取证书文件,执行:
   sudo chown -R root:www-data /etc/letsencrypt/live/example.com/
   sudo chmod -R 640 /etc/letsencrypt/live/example.com/
  1. 防火墙未开放443端口:Ubuntu/Debian用户执行sudo ufw allow 'Nginx Full'开放80和443端口。

六、证书自动续期

Let’s Encrypt证书有效期为90天,Certbot默认会设置自动续期任务。可通过以下命令测试续期:

sudo certbot renew --dry-run

若输出Successfully received certificate,说明自动续期正常。

总结

通过Certbot获取Let’s Encrypt免费证书,并配置Nginx监听443端口和自动重定向,即可快速实现HTTPS加密访问。HTTPS不仅提升安全性,还能优化SEO和用户体验,是现代网站的必备配置。

小夜