如何在 AWS Beanstalk 环境中覆盖 nginx
Posted
技术标签:
【中文标题】如何在 AWS Beanstalk 环境中覆盖 nginx【英文标题】:How to override nginx in AWS Beanstalk environment 【发布时间】:2019-02-02 18:01:10 【问题描述】:AWS beanstalk 环境中有很多情况需要我们覆盖 nginx conf。
设置最大文件附件 强制 http 到 https 为不同的静态资源设置不同的缓存过期时间 设置 WebSocket gzip 文件类型 等等等等AWS Support 建议使用 nginx.conf,它是 beanstalk 应用程序的副本,方法是查看实例中的 /etc/nginx/nginx.conf。这将用作基础,然后添加新的配置或块。 然后在项目中使用 .ebextensions/nginx/nginx.conf 和这个内容。 但是,最大的问题是,如果基础 nginx.conf 被 AWS 更改,那么可能很难首先知道它何时更改,然后重复复制它然后添加覆盖的步骤。类似this
大多数网络搜索提供的其他选项是使用 container_commands 和在 appdeploy 或 configdeploy 中创建文件 在 container_commands 中,人们建议修改 /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf 类似this
这种方法的问题在于,它仅在部署应用程序时才有效,而不是在任何 beanstalk 配置发生更改时(例如更改 env var)。
我的问题是更推荐的覆盖 nginx 配置的方法。
【问题讨论】:
【参考方案1】:为帮助您保持弹性 beanstalk 部署的可管理性,请记住以下几点:
首先:AWS 不会直接更改 Elastic Beanstalk 生产环境中的任何配置。同样,您也不应该直接在生产弹性 beanstalk 环境中进行任何更改。
AWS 建议您更改您的开发环境中的配置,并在您想让该更改生效时redeploy via the console or via the Elastic Beanstalk Command Line Interface (CLI)。这与容器化与否、负载平衡与否、弹性 beanstalk nginx 配置文件或覆盖选项无关。
第二:从您提供的第一个链接开始:您可以使用弹性 beanstalk 默认 nginx 配置 或 .ebextensions 中的覆盖配置。两者都没有。这应该有助于减少您的困惑。当您在开发环境中对其中任何一个进行更改时,此更改意味着您的应用程序的新版本,您需要将其部署到您的生产环境中才能生效。
第三:nginx 可以充当原始服务器的代理,并且原始服务器可能会指示资产的缓存过期。如果需要,有一些方法可以更改 nginx 配置上的配置以覆盖原始设置。来自NGINX caching guide:
默认情况下,NGINX 尊重原始的 Cache-Control 标头 服务器。它不会缓存将 Cache-Control 设置为的响应 Private、No-Cache 或 No-Store 或在响应中带有 Set-Cookie 标题。 NGINX 只缓存 GET 和 HEAD 客户端请求。
我希望这有助于澄清问题。部署您的应用程序并牢记这些技术,继续部署。如果错误,请将其删除并重试。
如果您遇到困难,请询问有关您的应用程序和特定配置的更具体的问题。您提供的问题越详细,我们就能越好地帮助您。
【讨论】:
以上是关于如何在 AWS Beanstalk 环境中覆盖 nginx的主要内容,如果未能解决你的问题,请参考以下文章
在 AWS Elastic Beanstalk 中使用 SSM 参数存储
AWS Elastic Beanstalk:如何在 ebextensions 中使用环境变量?
更改 IAM 用户密钥时如何更新 Elastic Beanstalk 环境变量中的 AWS 凭证?