Elastic Beanstalk Nginx 提供静态文件

Posted

技术标签:

【中文标题】Elastic Beanstalk Nginx 提供静态文件【英文标题】:Elastic Beanstalk Nginx Serve Static Files 【发布时间】:2018-05-18 17:03:21 【问题描述】:

我是 Elastic Beanstalk 的新手,正在尝试为 Node.js Express 应用程序提供服务,并利用 nginx 分别提供我们的静态文件。我遇到的所有教程都没有明确说明如何定义虚拟路径。

我正在尝试通过浏览器中的 AWS 控制台执行此操作。我正在尝试为静态文件添加虚拟路径/目录设置。在控制台中,我在Elastic Beanstalk > myapp > configuration > Static Files

但无论我在这里添加什么,我都会收到以下错误消息:

我也尝试添加完整的目录路径 (/var/app/current/dist/public/images/)。我需要添加另一个.ebextensions/*.conf 文件吗?我对 Nginx 没有太多经验,所以如果修复是 .conf 文件,我不知道它是什么

【问题讨论】:

【参考方案1】:

这是一个已知的错误,他们只在 web 控制台上支持 python。如果您的应用程序在 nodejs 中,则需要从 cli 设置这些属性。

您可以通过这种方式从 cli 设置值

aws elasticbeanstalk update-environment --environment-id your_enviornment_id --option-settings 'Namespace=aws:elasticbeanstalk:container:nodejs:staticfiles,OptionName=/assets,Value=/static/assets'

或从eb config编辑配置文件。

【讨论】:

哇...我为此浪费了至少几个小时的时间。谢谢您的答复。它成功了 是否有传递/OptionName 以便根服务于静态站点,还是应该通过 ebextensions 文件中的 nginx 重定向来完成? 我也想知道@Jermy 的问题的答案。【参考方案2】:

Kashif Zaidi 的回答效果很好,但如果您想在多个部署中保持设置一致,您可以在项目根目录中创建一个 .ebextensions 目录,其中包含一些文件,例如 01_environment_settings.config,指定如下设置:

option_settings:
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    "/assets": "/static/assets"

可以指定多个静态文件设置,例如:

option_settings:
  aws:elasticbeanstalk:container:nodejs:staticfiles:
    "/app/": "frontend_build/"
    "/static/": "frontend_build/static/"
    "/backend_static": "static/"

【讨论】:

如果我想链接到 s3 怎么办?比如通过 eb 通过子域提供存储在 s3 中的图像

以上是关于Elastic Beanstalk Nginx 提供静态文件的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk Nginx 提供静态文件

亚马逊网络服务 Elastic Beanstalk NGINX

将 http 转发到 https - Elastic Beanstalk + Nginx

PHP Elastic Beanstalk 环境的自定义 nginx 配置

在 Elastic Beanstalk 中插入新的 Nginx conf

带有 CloudWatch 日志和 Nginx 的 Elastic Beanstalk