如何在 Linux 上使用 Nginx 将 HTTP 重定向到 HTTPS(完整指南)
使用 HTTPS 保护您的网站不再是可选的 — 这是保护用户数据、维护信任和实现强大 SEO 排名的基本要求。Google 等搜索引擎会主动惩罚未加密的 HTTP 网站,而现代浏览器会将其标记为”不安全”。将所有 HTTP 流量重定向到 HTTPS 可确保每个访问者都自动到达您网站的加密版本,无需任何手动干预。
本综合指南将引导您完成整个过程:了解 HTTP 和 HTTPS 之间的区别、通过 Let’s Encrypt 安装免费 SSL 证书、在 Nginx 中配置永久 301 重定向,以及验证 Linux 服务器上的所有内容是否正常工作。
1. HTTP vs. HTTPS:有什么区别?
在深入配置之前,了解为什么这个重定向很重要是很关键的。
HTTP(超文本传输协议)
HTTP 是用于在网络浏览器和服务器之间传输数据的基础协议。但是,它以纯文本形式传输所有数据,这意味着任何信息——登录凭证、支付详情、个人数据——都可能被攻击者通过中间人 (MITM) 攻击拦截。HTTP 不提供加密、身份验证或数据完整性保证。
HTTPS(HTTP 安全)
HTTPS 是 HTTP 的安全扩展。它将标准 HTTP 协议包装在 SSL/TLS 加密内,在客户端和服务器之间创建加密隧道。这确保了:
- 机密性 — 数据在传输过程中无法被第三方读取。
- 完整性 — 数据在传输过程中无法被篡改。
- 身份验证 — 用户可以验证他们正在与合法服务器通信。
- SEO 优势 — Google 将 HTTPS 作为排名信号,为安全网站提供可衡量的优势。
- 浏览器信任 — Chrome、Firefox 和 Edge 为 HTTPS 网站显示挂锁图标,为 HTTP 网站显示”不安全”警告。
底线:在当今环境中运行没有 HTTPS 的网站是一个严重的安全和业务风险。
2. 前提条件
在按照本指南操作之前,请确保您已准备好以下内容:
- 运行 Nginx 的 Linux 服务器(Ubuntu 20.04/22.04、Debian 11/12 或类似系统)
- 已注册的域名指向您的服务器 IP 地址
- 对您的服务器拥有 root 或
sudo访问权限 - 对 Linux 命令行有基本了解
如果您正在寻找可靠的服务器环境来托管您的网站,AlexHost 的 VPS Hosting 提供完全托管和非托管的 Linux VPS 计划,针对 Web 应用程序进行了优化,配备 SSD 存储和高可用性网络。
您还需要有效的 SSL 证书。本指南使用通过 Certbot 的免费 Let’s Encrypt 证书颁发机构。如果您需要用于商业用途的扩展验证 (EV) 或组织验证 (OV) 证书,请考虑探索 AlexHost 的 SSL Certificates。
3. 步骤 1:使用 Let’s Encrypt 安装 SSL 证书
Let’s Encrypt 是一个免费、自动化和开放的证书颁发机构。Certbot 是官方客户端,可自动化从 Let’s Encrypt 获取和续期 SSL/TLS 证书以及配置 Web 服务器的过程。
安装 Certbot 和 Nginx 插件
更新您的软件包索引并安装 Certbot 以及 Nginx 插件:
sudo apt update
sudo apt install certbot python3-certbot-nginx -y获取并安装您的 SSL 证书
使用 --nginx 标志运行 Certbot,以自动获取证书并配置 Nginx 使用它:
sudo certbot --nginx -d example.com -d www.example.com将 example.com 替换为您的实际域名。Certbot 将:
- 通过 ACME 质询验证域名所有权
- 从 Let’s Encrypt 获取已签名的证书
- 自动修改您的 Nginx 配置以在端口 443 上启用 HTTPS
- 可选择设置自动 HTTP 到 HTTPS 重定向(您可以在 Certbot 中跳过此步骤,并按下面所示手动配置以获得完全控制)
启用自动证书续期
Let’s Encrypt 证书每 90 天过期一次。Certbot 安装 systemd 计时器或 cron 作业以自动处理续期。验证它是否处于活动状态:
sudo systemctl status certbot.timer您也可以执行干运行续期测试:
sudo certbot renew --dry-run4. 第2步:配置Nginx将HTTP重定向到HTTPS
安装SSL证书后,您现在需要配置Nginx以永久将所有HTTP(端口80)流量重定向到HTTPS(端口443)。这是使用301 Moved Permanently重定向完成的,这是SEO的正确重定向类型——它将链接权益传递到您页面的HTTPS版本。
打开您的Nginx服务器块配置
Nginx站点配置通常存储在/etc/nginx/sites-available/中。打开您域名的配置文件:
sudo nano /etc/nginx/sites-available/example.com配置HTTP到HTTPS重定向块
您的配置文件将包含一个或多个server块。找到监听端口80(HTTP)的块,并用以下重定向规则替换或更新它:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
# Permanently redirect all HTTP requests to HTTPS
return 301 https://$host$request_uri;
}您的HTTPS服务器块(端口443),Certbot可能已自动配置,应该看起来类似于这样:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name example.com www.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
root /var/www/example.com/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}> 为什么使用return 301而不是rewrite?
> return 301指令比rewrite规则更快更高效。它立即返回重定向响应,而无需Nginx处理其他位置块,减少服务器开销并改进响应时间。
理解重定向指令
| 组件 | 说明 |
|---|---|
listen 80 | Nginx在HTTP端口80上监听传入连接 |
listen [::]:80 | 在端口80上启用IPv6支持 |
server_name | 定义此块适用的域名 |
return 301 | 发出永久重定向(最适合SEO) |
https://$host | 在重定向中保留原始主机名 |
$request_uri | 保留完整的原始URI路径和查询字符串 |
5. 步骤 3:测试您的 Nginx 配置
在重新加载或重启 Nginx 之前,切勿不先测试您的配置。 配置文件中的语法错误将导致 Nginx 无法启动,使您的网站离线。
运行内置的 Nginx 配置测试:
sudo nginx -t成功的测试会产生以下输出:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful如果您看到任何错误,请仔细查看输出。Nginx 将指示检测到问题的文件和行号。常见问题包括:
- 指令末尾缺少分号
- 未关闭的花括号
{} - SSL 证书的文件路径不正确
- 重复的
server_name条目
在继续之前修复任何报告的错误。
6. 步骤 4:重新加载 Nginx 以应用更改
配置测试通过后,重新加载 Nginx 以应用您的更改。使用 reload 而不是 restart 是首选,因为它可以优雅地应用新配置,而不会断开活跃连接:
sudo systemctl reload nginx要确认重新加载后 Nginx 正确运行:
sudo systemctl status nginx您应该在输出中看到 active (running)。
7. 步骤 5:验证重定向是否正常工作
Nginx 重新加载后,现在是时候确认重定向功能是否正常运行。
方法 1:浏览器测试
- 打开您的网络浏览器。
- 导航到
http://example.com(使用 HTTP,而不是 HTTPS)。 - 观察浏览器自动将您重定向到
https://example.com。 - 确认地址栏中出现了挂锁图标,表示有效的 SSL 连接。
方法 2:使用 curl 的命令行测试
使用 curl 和 -I 标志来仅获取 HTTP 响应头,而不下载页面正文:
curl -I http://example.com配置正确的重定向会产生以下响应:
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 01 Jan 2025 12:00:00 GMT
Content-Type: text/html
Location: https://example.com/
Connection: keep-alive要验证的关键指标:
- 状态代码
301 Moved Permanently— 确认永久重定向已就位。 Location: https://example.com/— 确认流量被重定向到 HTTPS 版本。
方法 3:在线重定向检查器
您也可以使用免费的在线工具,例如 redirect-checker.org 或 httpstatus.io,来追踪完整的重定向链,并确认没有重定向循环或不必要的跳转。
8. 常见问题和故障排除
重定向循环
症状:浏览器显示”太多重定向”错误。
原因:您的 HTTPS 服务器块也触发了返回 HTTP 的重定向,形成无限循环。
修复:确保 return 301 指令仅存在于 HTTP(端口 80)服务器块中,而不在 HTTPS(端口 443)块中。
混合内容警告
症状:即使重定向正常工作,挂锁图标仍显示警告。
原因:您的 HTML 页面仍然使用 http:// URL 引用 HTTP 资源(图像、脚本、样式表)。
修复:将所有内部资源 URL 更新为使用 https:// 或协议相对 URL(//)。对于 WordPress 网站,使用 Really Simple SSL 等插件。
SSL 证书未找到
症状:Nginx 启动失败,出现关于缺少证书文件的错误。
原因:在 ssl_certificate 和 ssl_certificate_key 中指定的路径与实际证书文件位置不匹配。
修复:使用以下命令验证证书路径:
sudo ls /etc/letsencrypt/live/example.com/Certbot 续期失败
症状:自动续期因连接错误而失败。
原因:端口 80 可能被防火墙阻止,导致 Let’s Encrypt 的 HTTP-01 质询无法完成。
修复:确保在防火墙中打开端口 80:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload9. 结论
在 Linux 服务器上使用 Nginx 将 HTTP 重定向到 HTTPS 是一项直接但至关重要的配置任务。通过实施永久 301 重定向,您可以确保每位访问者——无论他们如何访问您的网站——都会自动获得加密的安全版本。这可以保护敏感的用户数据、建立访问者信任、满足现代浏览器的安全要求,并提供可衡量的 SEO 优势。
以下是本指南涵盖的关键步骤的回顾:
- 安装 Certbot 并从 Let’s Encrypt 获取免费 SSL 证书。
- 配置 Nginx HTTP 服务器块,使用
return 301重定向到 HTTPS。 - 使用
sudo nginx -t测试您的配置,然后应用更改。 - 使用
sudo systemctl reload nginx重新加载 Nginx。 - 验证重定向,使用您的浏览器、
curl或在线重定向检查器。 - 监控证书续期,确保您的 SSL 证书永不过期。
为了获得最佳效果,请在高性能、可靠的托管平台上运行 Nginx Web 服务器。AlexHost 提供VPS 托管,具有完全的 root 访问权限、SSD NVMe 存储和灵活的 Linux 发行版——非常适合托管 Nginx 驱动的网站。如果您需要预配置的控制面板环境,请探索带 cPanel 的 VPS 或浏览所有可用的VPS 控制面板,找到适合您工作流程的管理界面。对于高流量或资源密集型应用程序,专用服务器提供您的基础设施所需的最大性能和隔离。
定期审计您的 SSL 证书的有效性,保持 Nginx 更新,并定期审查您的服务器安全配置,以维护强大且值得信赖的网络存在。
