将 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