在 Elastic Beanstalk 上使用 Nginx 在子域上配置 Laravel

Posted

技术标签:

【中文标题】在 Elastic Beanstalk 上使用 Nginx 在子域上配置 Laravel【英文标题】:Configure Laravel on a subdomain with Nginx on Elastic Beanstalk 【发布时间】:2020-11-10 01:16:12 【问题描述】:

我的 Laravel 应用程序在主域(https://www.example.com 和 https://example.com)上本地和远程运行,但我的暂存环境不起作用。主页有效,但其他路线无效(我收到 504)。

我使用的 nginx.conf 如下:

location / 
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
    if ($http_x_forwarded_proto = 'http')
        return 301 https://$host$request_uri;
    

如何将https://staging.example.com 添加到此配置中?

【问题讨论】:

你是如何使用.ebextentions设置nginx的?您还使用基于 Amazon Linux 1 或 2 的 EB 平台吗? @Marcin 是的,.ebextensions。 Linux 2. 嗨。暂存环境是单独的EB环境吗?是单实例环境还是负载均衡环境? 负载平衡和第二个 EB 环境(从生产中克隆)。 如果它的负载平衡环境,从 http 到 https 的重定向应该在您的 ALB 上完成。 SSL 证书应部署在 ALB 上。并且域staging.example.com 是使用Route53 设置的?如果您使用负载平衡环境,我不确定您为什么要使用 nginx 将 http 重定向到 https? 【参考方案1】:

由于您使用的是 Amazon Linux 2 (AL2),这可以解释为什么没有使用您的 nginx 配置文件。

具体来说,在 AL2 平台上,nginx 配置文件 should be set 在 .platform/nginx/conf.d/ 中,而不是在 .ebextensions 中。 nginx 是在 AL1 中使用 .ebextentions 设置的,但在 AL2 中没有。

因此,您可以尝试使用以下内容创建文件.platform/nginx/conf.d/myconf.conf

location / 
    try_files $uri $uri/ /index.php?$query_string;
    gzip_static on;
    if ($http_x_forwarded_proto = 'http')
        return 301 https://$host$request_uri;
    

请注意,我无法验证 nginx 配置文件是否正确。这只是基于你的问题。它也可能有错误。

【讨论】:

抱歉,我刚刚注意到我在两个位置都有该文件。也在 .platform/nginx/conf.d/elasticbeanstalk/laravel.conf 下。 @Sherlock 所以配置本身可能有问题。你可以ssh到EB实例并手动应用它,重新启动nginx并检查它是否按预期工作? 完成了,但还是不行。我不认为配置本身是错误的;这是适用于example.com 和example.com 的文件。我只是认为它缺乏子域支持,但我知道我应该如何解决这个问题。 @Sherlock 好的。希望它会成功。请让我知道它会如何进行。顺便说一句,.ebextentions 中的 nginx 文件是多余的。在 AL2 上,.platform 应该用于 nginx。

以上是关于在 Elastic Beanstalk 上使用 Nginx 在子域上配置 Laravel的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 上使用 Yarn 安装包

使用 cloudformation 在 Elastic Beanstalk 上启动 docker 多容器

使用 Postgres 在 Elastic Beanstalk 上设置 Django

使用 Docker 在 AWS Elastic Beanstalk 上部署失败

在 Elastic Beanstalk 上使用 Nginx 在子域上配置 Laravel

在 Amazon Elastic Beanstalk 上使用 Docker 部署 Django