poing/laravel-elb

适用于 AWS Elastic Beanstalk(ELB)上运行的 Laravel 应用程序的 HTTPS 必备元素

v1.0.3 2020-08-24 15:30 UTC

README

本软件包为 Laravel 应用程序在 AWS Elastic Beanstalk(ELB)上运行提供必要的 HTTPS 元素。

它提供以下功能

  • 部署环境的配置文件 .ebextensions
    • 将文档根目录设置为 /public
    • 示例 展示如何读取环境配置变量
    • .env.aws 复制到 .env
    • 运行 artisan 命令
    • 如何 安装和运行 npm 命令
  • 为 MariaDB 或 Aurora 提供的 defaultStringLength()
  • HTTP 到 HTTPS 重定向的中间件
    • 包括配置 HTTPS 重定向异常的能力
  • 用于识别 安全 请求的中间件

带有 HTTPS 的 Elastic Beanstalk 快速入门指南

以下是 分步 指令,用于将新的 Laravel 应用程序部署到 AWS Elastic Beanstalk。

安装

您可以使用 composer 安装此软件包。

# With the Suggested Packages
composer require czproject/git-php ocramius/package-versions poing/laravel-elb

# Without the Suggested Packages
composer require poing/laravel-elb

命令

安装此软件包后,以下 artisan 命令将在您的 Laravel 应用程序中可用

  • elb:install: 将 .ebextensions 目录和 .env.aws 添加到 Laravel 应用程序。
  • elb:publish: 将 config/laravel-elb.php 添加到 Laravel 应用程序,以允许自定义 HTTPS 重定向。
    • 这将 禁用 软件包中包含的 示例 routeview

Elastic Beanstalk 配置文件

本软件包提供 Elastic Beanstalk 配置文件 (.ebextensions),以配置环境、自定义 AWS 资源和执行 Laravel 任务。 例如运行 artisan 命令。

.ebextensions/10-document-root.config
.ebextensions/20-app-key-test.config
.ebextensions/30-env-file.config
.ebextensions/40-artisan.config
.ebextensions/50-node-npm-gulp.config

这些提供了将 Laravel 部署到 Elastic Beanstalk 的 基本 要求。文件按处理顺序命名,以便您可以在其中插入文件。

如果您认为缺少某些内容,或者某些内容可以做得更好,请随时提交 pull request。
除 HTTP 到 HTTPS 重定向外,请参阅下一节以获取解释。

MariaDB 或 Aurora

因为我 经常 使用 Aurora 或 MarieDB,而不是 MySQL,所以我添加了对非 MySQL 数据库的 修复

Schema::defaultStringLength(191);

Laravel 5.4 对默认数据库字符集进行了更改,现在为 utf8mb4,它包括存储表情符号的支持。这仅影响新应用程序,并且只要您运行 MySQL v5.7.7 或更高版本,您就不需要做任何事情。

虽然 AWS 提供了更高版本的 MySQL。Aurora(《MySQL 兼容》), 支持 尚未 增加的字符串长度。

HTTP 到 HTTPS 重定向

本软件包中包含的中间件 消除 使用 Apache RewriteEngine 方法通过 .ebextensions 处理 HTTP 到 HTTPS 重定向的必要性。同时允许 某些 流量 被重定向,例如 Elastic Beanstalk HealthChecker。

以下 任何 条件下不会发生重定向

  • User-Agent 是 Elastic Beanstalk HealthChecker
  • 应用程序环境 APP_ENV 设置为 local
  • URIexclude 配置设置匹配

它提供了与AWS文档中推荐的https-redirect相同的功能,并允许轻松排除自定义路径。

您可以选择使用.ebextensions方法,它不应影响此中间件。

这个中间件是在尝试使用.ebextensions方法排除多个条件时产生的挫折的结果。使用Laravel处理HTTP到HTTPS的重定向提供了更多的灵活性,减少了烦恼。我正在与一个无法使用HTTPS从第三方域名获取内容的应用程序一起工作。

  • 此包不会阻止HTTPS访问。
  • 不会将HTTPS重定向到HTTP。
  • 允许对指定的URI路径进行HTTP访问。

基本用法

默认情况下,此包包含一个示例 视图,并允许对以/unsecure为基的URI进行HTTP访问。

// Green = HTTP Allowed, Red = Redirected to HTTPS
+ http://{domain.tld}/unsecure
+ http://{domain.tld}/unsecure/your/web/route
- http://{domain.tld}/
- http://{domain.tld}/other

配置

要使用自己的配置,运行elb:publishconfig/laravel-elb.php安装到您的Laravel应用程序中。

php artisan elb:publish

这将禁用包中包含的示例 视图

排除URI路径
  • exclude:一个数组,包含那些不会被重定向到HTTPS的URI路径。
    • 空数组将重定向所有HTTP到HTTPS。
    'exclude' => [ 'alpha', 'bravo/charlie', ],
行为
// Green = HTTP Allowed, Red = Redirected to HTTPS
+ http://{domain.tld}/alpha
+ http://{domain.tld}/alpha/any/path
- http://{domain.tld}/bravo
+ http://{domain.tld}/bravo/charlie
+ http://{domain.tld}/bravo/charlie/any/path
- http://{domain.tld}/bravo/any
严格模式
  • strict:布尔设置,将限制路径仅限于在exclude设置中指定的那些。
    'exclude' => [ 'alpha', 'bravo/charlie', ],
    'strict' => true,
行为
// Green = HTTP Allowed, Red = Redirected to HTTPS
+ http://{domain.tld}/alpha
- http://{domain.tld}/alpha/any/path
- http://{domain.tld}/bravo
+ http://{domain.tld}/bravo/charlie
- http://{domain.tld}/bravo/charlie/any/path
- http://{domain.tld}/bravo/any

识别安全请求

AWS Elastic Beanstalk环境使用负载均衡器来服务HTTPS请求,而Laravel应用程序实际上运行在仅支持HTTP的AWS Elastic Beanstalk环境中。

这可能导致Laravel应用程序将HTTP表示为返回URL信息的辅助方法,因为Laravel应用程序并不知道负载均衡器。

不正确的响应
// https://domain.tld
url()->current(); // Returns: 'http://domain.tld'

此包使用peppeocchi/laravel-elb-middleware来简化在AWS Elastic Beanstalk上使用HTTPS的Laravel应用程序。确保您的Laravel应用程序在带有负载均衡器的Elastic Beanstalk上运行时将正确识别安全请求。允许返回URL信息的辅助方法表示正确的协议scheme

正确的响应
// https://domain.tld
url()->current(); // Returns: 'https://domain.tld'

此中间件基于gist,由Giuseppe Occhipinti创建,执行完全相同的功能。