将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)

Posted

技术标签:

【中文标题】将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)【英文标题】:Redirect HTTP to HTTPS (Middleware redirect vs Nginx) 【发布时间】:2019-08-14 09:37:57 【问题描述】:

我想问一下HTTP-to-HTTPS 重定向。正如我们所知,WWW-to-none-WWW 重定向是通过从 Web 服务器端重定向来实现的。但是当涉及到 https 重定向时,它可以通过两种方式完成,服务器端 (nginx etc...) 和应用程序端 (Middleware)。我想知道:

    哪种方式有效且性能更高。 考虑到同一服务器上的多个top-level 域和sub-domain 域,每种方式的优缺点。

谢谢。

参考:

    Redirect WWW to non-WWW in Laravel - Stack overflow Redirect HTTP to HTTPS in Laravel - Stack overflow HTTP Request To HTTPS on nginx - nixCraft

【问题讨论】:

【参考方案1】:

这里基于服务器的重定向应该更高效,因为它发生在任何应用程序代码加载之前。

就我个人而言,我总是在所有站点的 nginx server 块中执行此操作。我为一个域创建了一个 conf 文件,并有 2 个 server 块,一个主要的块在 443 上侦听 HTTPS 流量,还有一个只识别(子)域并重定向到 HTTPS 协议的小块。

这是我为特定子域设置的重定向服务器 块示例:

server 
    server_tokens off;
    listen 80;
    server_name sub.domain.com;
    return 301 https://sub.domain.com$request_uri;

至于基于服务器的优缺点,我想说的是:

优点

性能 简单

缺点

需要 root 访问权限(至少对于 nginx,Apache 您可以在 .htaccess 文件中执行此操作,但这本身就有性能成本) 不能如此轻松地即时更改内容(灵活性?)

【讨论】:

很好的答案。但是一个问题;如果我在服务器端进行重定向,除了更改APP_URL 环境变量之外,我是否需要更改我的 Laravel 项目中的任何内容(忽略我安装的第三方包)?该应用程序会自动将我的所有路由和 URL 更改为 https 吗? 只要您不使用路由/资产的完整路径(图像/css/js 等)并且仅使用 URI 路径,例如; /path/to/something,然后除了 APP_URL 之外,没有什么需要改变的(我在 HTTP 下开发,但生产始终是 HTTPS)。关于资产,如果您也指定了它们的(子)域,您可以删除协议,例如:<img src="//sub.domain.com/some-image.png" alt=""> 这将使用当前协议(HTTP 或 HTTPS,无论网站以何种身份访问)并相应加载 完美。我将等待检查是否有其他人愿意回答。如果我没有得到任何东西,你的将被接受。非常感谢您完整的回答。 现在,这个答案对我来说看起来非常完美。谢谢。

以上是关于将 HTTP 重定向到 HTTPS(中间件重定向 vs Nginx)的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点

apache将http重定向到https,将www重定向到非www

NGINX 将 http 重定向到 https,将非 www 重定向到 ww

使用 Nginx 将 HTTP 重定向到 HTTPS

如何通过 web.config 将 http 重定向到 https 并将 www 重定向到非 www?

IIS 将 www 重定向到非 www 和 http 到 https:是不是可以仅使用一个重定向来完成?