- 获取 SSL/TLS 证书:这是建立 HTTPS 连接的凭证,用于证明你的服务器身份,并加密数据传输。
- 安装 Web 服务器:Nginx 或 Apache,它们将处理 HTTP/HTTPS 请求并提供网站内容。
- 配置 Web 服务器:让服务器知道如何使用证书来处理 HTTPS 流量,并通常将 HTTP 流量重定向到 HTTPS。
- 启动并测试服务:确保配置正确,服务正常运行。
下面我将以目前最流行、性能高效的 Nginx 作为 Web 服务器,并使用免费的 Let's Encrypt 证书为例,为你提供一个详细、可操作的指南。

核心概念
- HTTPS (Hypertext Transfer Protocol Secure):HTTP 的安全版本,通过 SSL/TLS 协议对通信内容进行加密。
- SSL/TLS 证书:由受信任的证书颁发机构签发的数字文件,包含了服务器的公钥和一些身份信息,浏览器会验证这个证书的有效性。
- Let's Encrypt:一个免费的、自动化的、开放的证书颁发机构,是目前个人和小型网站的首选。
- Nginx:一个高性能的 HTTP 和反向代理服务器,也常用作邮件代理服务器。
详细步骤:使用 Nginx 和 Let's Encrypt
第 0 步:准备工作
- 一台 Linux 服务器:推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8,本教程以 Ubuntu 为例。
- 一个域名:
yourdomain.com,你需要将这个域名的 DNS A 记录指向你服务器的公网 IP 地址。 - 服务器上拥有 root 权限,或者一个具有
sudo权限的用户。
第 1 步:安装 Nginx
更新你的系统包列表,然后安装 Nginx。
# 更新包列表 sudo apt update # 安装 Nginx sudo apt install nginx -y
安装完成后,Nginx 通常会自动启动,你可以检查它的状态:
sudo systemctl status nginx
如果看到 active (running),说明 Nginx 已经成功运行,你可以在浏览器中访问你的服务器 IP 地址,应该能看到 Nginx 的欢迎页面。
第 2 步:配置服务器防火墙
为了允许外部访问 Nginx,你需要打开 HTTP (80) 和 HTTPS (443) 端口。

# 允许 Nginx 的 Full 配置(包含 HTTP 和 HTTPS) sudo ufw allow 'Nginx Full' # 如果只想分别开放 # sudo ufw allow 80/tcp # sudo ufw allow 443/tcp
第 3 步:安装 Certbot (Let's Encrypt 客户端)
Certbot 是一个强大的工具,可以自动获取和续签 Let's Encrypt 证书。
# 安装 Certbot 及其 Nginx 插件 sudo apt install certbot python3-certbot-nginx -y
第 4 步:获取 SSL 证书
Certbot 可以自动检测 Nginx 的配置并获取证书,这是最简单的方法。
# 运行 Certbot,它会自动与 Nginx 交互 sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
命令解释:
--nginx:告诉 Certbot 使用 Nginx 插件。-d yourdomain.com:为你的主域名申请证书。-d www.yourdomain.com:为你的www子域名也申请证书(可选,但推荐)。
运行此命令后,Certbot 会:
- 提示你输入一个邮箱地址,用于证书过期通知和恢复流程。
- 询问你是否同意 Let's Encrypt 的服务条款。
- 关键步骤:询问你是否将 HTTP 流量自动重定向到 HTTPS。强烈建议选择
2: Redirect,这会自动帮你完成安全配置。
如果一切顺利,Certbot 会成功获取证书,并自动修改你的 Nginx 配置文件,使其支持 HTTPS。
第 5 步:验证 Nginx 配置并重启服务
Certbot 已经修改了配置,但最好我们自己再检查一下。
-
检查配置语法:
sudo nginx -t
如果看到
syntax is ok和test is successful,说明配置文件没有语法错误。 -
重启 Nginx 使新配置生效:
sudo systemctl restart nginx
第 6 步:测试你的 HTTPS 服务器
打开浏览器,访问 https://yourdomain.com。
- 你应该能看到你的网站内容。
- 浏览器地址栏会显示一个锁形图标,表明连接是安全的。
- 你还可以使用一些在线工具(如 SSL Labs' SSL Test)来测试你的 SSL 配置是否安全、评分高低。
手动配置 Nginx (进阶)
如果你不想使用 Certbot 的自动配置功能,或者你的 Nginx 配置比较特殊,你可以手动完成配置。
创建 Nginx 配置文件
在 /etc/nginx/sites-available/ 目录下为你的网站创建一个配置文件,yourdomain.com。
sudo nano /etc/nginx/sites-available/yourdomain.com
并根据你的实际情况进行修改:
# 监听 80 端口 (HTTP),并将其重定向到 443 端口 (HTTPS)
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
# 强制重定向到 HTTPS
return 301 https://$host$request_uri;
}
# 监听 443 端口 (HTTPS)
server {
# 监听所有 IPv4 地址的 443 端口
listen 443 ssl http2;
# 监听所有 IPv6 地址的 443 端口
listen [::]:443 ssl http2;
server_name yourdomain.com www.yourdomain.com;
# SSL 证书配置 (路径由 Certbot 自动生成)
ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
# 安全增强配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:ECDHE-RSA-AES128-GCM-SHA256';
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 网站根目录
root /var/www/yourdomain.com/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
启用新配置
创建符号链接将配置文件从 sites-available 链接到 sites-enabled。
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
测试并重启 Nginx
与之前一样,测试配置并重启服务。
sudo nginx -t sudo systemctl restart nginx
自动续签 Let's Encrypt 证书
Let's Encrypt 的证书有效期为 90 天,所以必须定期续签,幸运的是,Certbot 已经设置了一个定时任务来自动完成这个操作。
你可以检查这个定时任务:
sudo systemctl status certbot.timer
确保它的状态是 active (enabled),它会每天检查一次,并在证书到期前自动续签。
常见问题与解决方案
-
问题:浏览器访问 HTTPS 显示“不安全”或证书错误。
- 原因:证书域名与访问的域名不匹配,或者证书路径配置错误。
- 解决:仔细检查 Nginx 配置文件中的
server_name和ssl_certificate路径是否正确。
-
问题:
nginx: [emerg] unknown directive "ssl"错误。- 原因:Nginx 在编译时没有启用 SSL 模块,或者
nginx.conf中没有加载ssl_module,这种情况在标准安装的 Nginx 中很少见。 - 解决:
sudo apt install nginx会自动包含所有标准模块,如果确实缺少,可能需要重新编译 Nginx。
- 原因:Nginx 在编译时没有启用 SSL 模块,或者
-
问题:Certbot 获取证书失败,提示 DNS 或连接问题。
- 原因:你的域名 DNS 记录没有正确指向服务器 IP,或者服务器防火墙阻止了 80/443 端口。
- 解决:使用
dig yourdomain.com或nslookup yourdomain.com检查 DNS 解析是否正确,使用sudo ufw status检查防火墙规则。
搭建 HTTPS 服务器的核心流程是:
- 安装 Nginx 作为 Web 服务器。
- 使用 Certbot 免费获取 Let's Encrypt 证书。
- 配置 Nginx 使用该证书,并强制 HTTP 到 HTTPS 的重定向。
- 启用并测试,确保一切正常。
- 信任 Certbot 的自动续签机制,无需手动干预。
通过以上步骤,你就可以在 Linux 上成功搭建一个安全、可靠的 HTTPS 服务器了。
