所有托管服务节省 15%

测试技能,享折扣

使用代码: Skills 开始使用
China
Linux 安全

如何在 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 将:

  1. 通过 ACME 质询验证域名所有权
  2. 从 Let’s Encrypt 获取已签名的证书
  3. 自动修改您的 Nginx 配置以在端口 443 上启用 HTTPS
  4. 可选择设置自动 HTTP 到 HTTPS 重定向(您可以在 Certbot 中跳过此步骤,并按下面所示手动配置以获得完全控制)

启用自动证书续期

Let’s Encrypt 证书每 90 天过期一次。Certbot 安装 systemd 计时器或 cron 作业以自动处理续期。验证它是否处于活动状态:

sudo systemctl status certbot.timer

您也可以执行干运行续期测试:

sudo certbot renew --dry-run

4. 第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 80Nginx在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:浏览器测试

  1. 打开您的网络浏览器。
  2. 导航到 http://example.com(使用 HTTP,而不是 HTTPS)。
  3. 观察浏览器自动将您重定向到 https://example.com
  4. 确认地址栏中出现了挂锁图标,表示有效的 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.orghttpstatus.io,来追踪完整的重定向链,并确认没有重定向循环或不必要的跳转。

8. 常见问题和故障排除

重定向循环

症状:浏览器显示”太多重定向”错误。

原因:您的 HTTPS 服务器块也触发了返回 HTTP 的重定向,形成无限循环。

修复:确保 return 301 指令存在于 HTTP(端口 80)服务器块中,而不在 HTTPS(端口 443)块中。

混合内容警告

症状:即使重定向正常工作,挂锁图标仍显示警告。

原因:您的 HTML 页面仍然使用 http:// URL 引用 HTTP 资源(图像、脚本、样式表)。

修复:将所有内部资源 URL 更新为使用 https:// 或协议相对 URL(//)。对于 WordPress 网站,使用 Really Simple SSL 等插件。

SSL 证书未找到

症状:Nginx 启动失败,出现关于缺少证书文件的错误。

原因:ssl_certificatessl_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 reload

9. 结论

在 Linux 服务器上使用 Nginx 将 HTTP 重定向到 HTTPS 是一项直接但至关重要的配置任务。通过实施永久 301 重定向,您可以确保每位访问者——无论他们如何访问您的网站——都会自动获得加密的安全版本。这可以保护敏感的用户数据、建立访问者信任、满足现代浏览器的安全要求,并提供可衡量的 SEO 优势。

以下是本指南涵盖的关键步骤的回顾:

  1. 安装 Certbot 并从 Let’s Encrypt 获取免费 SSL 证书。
  2. 配置 Nginx HTTP 服务器块,使用 return 301 重定向到 HTTPS。
  3. 使用 sudo nginx -t 测试您的配置,然后应用更改。
  4. 使用 sudo systemctl reload nginx 重新加载 Nginx
  5. 验证重定向,使用您的浏览器、curl 或在线重定向检查器。
  6. 监控证书续期,确保您的 SSL 证书永不过期。

为了获得最佳效果,请在高性能、可靠的托管平台上运行 Nginx Web 服务器。AlexHost 提供VPS 托管,具有完全的 root 访问权限、SSD NVMe 存储和灵活的 Linux 发行版——非常适合托管 Nginx 驱动的网站。如果您需要预配置的控制面板环境,请探索带 cPanel 的 VPS 或浏览所有可用的VPS 控制面板,找到适合您工作流程的管理界面。对于高流量或资源密集型应用程序,专用服务器提供您的基础设施所需的最大性能和隔离。

定期审计您的 SSL 证书的有效性,保持 Nginx 更新,并定期审查您的服务器安全配置,以维护强大且值得信赖的网络存在。