15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
01.11.2024
3 +1

如何在 Linux 上使用 Nginx 将 HTTP 重定向到 HTTPS(完整指南)

使用HTTPS保护您的网站不再是可选的——它是保护用户数据、维护信任和实现强大SEO排名的基本要求。Google等搜索引擎会主动惩罚未加密的HTTP网站,而现代浏览器会将其标记为”不安全”。将所有HTTP流量重定向到HTTPS可确保每个访问者都自动到达您网站的加密版本,无需任何手动干预。

本综合指南将引导您完成整个过程:了解HTTP和HTTPS之间的区别、通过Let’s Encrypt安装免费SSL证书、在Nginx中配置永久301重定向,以及验证Linux服务器上的所有内容是否正常工作。

目录

  1. HTTP与HTTPS:有什么区别?
  2. 前置条件
  3. 第1步:使用Let’s Encrypt安装SSL证书
  4. 第2步:配置Nginx以将HTTP重定向到HTTPS
  5. 第3步:测试您的Nginx配置
  6. 第4步:重新加载Nginx以应用更改
  7. 第5步:验证重定向是否有效
  8. 常见问题和故障排除
  9. 结论

1. HTTP与HTTPS:有什么区别? {#http-vs-https}

在深入配置之前,了解为什么这个重定向很重要是很重要的。

HTTP(超文本传输协议)

HTTP是用于在Web浏览器和服务器之间传输数据的基础协议。但是,它以纯文本形式传输所有数据,这意味着任何信息——登录凭证、支付详情、个人数据——都可能被使用中间人(MITM)攻击的攻击者拦截。HTTP不提供加密、身份验证或数据完整性保证。

HTTPS(HTTP安全)

HTTPS是HTTP的安全扩展。它将标准HTTP协议包装在SSL/TLS加密中,在客户端和服务器之间创建加密隧道。这确保:

  • 机密性——第三方无法在传输中读取数据。
  • 完整性——数据在传输过程中无法被篡改。
  • 身份验证——用户可以验证他们正在与合法服务器通信。
  • SEO优势——Google将HTTPS用作排名信号,为安全网站提供可衡量的优势。
  • 浏览器信任——Chrome、Firefox和Edge为HTTPS网站显示挂锁图标,为HTTP网站显示”不安全”警告。

底线:在当今环境中运行没有HTTPS的网站是一个严重的安全和业务风险。

2. 前置条件 {#prerequisites}

在遵循本指南之前,请确保您已具备以下条件:

  • 运行Nginx的Linux服务器(Ubuntu 20.04/22.04、Debian 11/12或类似版本)
  • 指向您服务器IP地址的已注册域名
  • 对您的服务器的root或sudo访问权限
  • 对Linux命令行的基本熟悉

如果您正在寻找可靠的服务器环境来托管您的网站,AlexHost的VPS托管提供完全托管和非托管的Linux VPS计划,针对Web应用程序进行了优化,具有SSD存储和高可用性网络。

您还需要一个有效的SSL证书。本指南通过Certbot使用免费的Let’s Encrypt证书颁发机构。如果您需要用于业务用途的扩展验证(EV)或组织验证(OV)证书,请考虑探索AlexHost的SSL证书

3. 第1步:使用Let’s Encrypt安装SSL证书 {#install-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 {#configure-nginx}

安装了SSL证书后,您现在需要配置Nginx以永久将所有HTTP(端口80)流量重定向到HTTPS(端口443)。这是使用301永久移动重定向完成的,这是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配置 {#test-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以应用更改 {#reload-nginx}

配置测试通过后,重新加载Nginx以应用您的更改。使用reload而不是restart是首选的,因为它优雅地应用新配置而不会丢弃活动连接:

sudo systemctl reload nginx

要在重新加载后确认Nginx正确运行:

sudo systemctl status nginx

您应该在输出中看到active (running)

7. 第5步:验证重定向是否有效 {#verify-redirect}

重新加载Nginx后,是时候确认重定向是否正常工作了。

方法1:浏览器测试

  1. 打开您的Web浏览器。
  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. 常见问题和故障排除 {#troubleshooting}

重定向循环

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

原因:您的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. 结论 {#conclusion}

在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存

15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用