在 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 上部署失败