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

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

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

谢谢。

参考:

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

【问题讨论】:

    标签: php laravel nginx redirect https


    【解决方案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,无论网站以何种身份访问)并相应加载
    • 完美。我将等待检查是否有其他人愿意回答。如果我没有得到任何东西,你的将被接受。非常感谢您完整的回答。
    • 现在,这个答案对我来说看起来非常完美。谢谢。
    猜你喜欢
    • 2011-03-29
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2018-08-18
    • 2017-02-25
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多