如何在 AWS Beanstalk 环境中覆盖 nginx

How to override nginx in AWS Beanstalk environment

在AWS beanstalk环境中,有很多情况我们需要覆盖nginx conf。

AWS Support 建议使用 nginx.conf,它是 beantalk 应用程序的副本,方法是查看实例中的 /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

这种方法的问题在于它仅在部署应用程序时有效,而在任何 beantalk 配置发生更改(如更改环境变量)时无效。

我的问题是,哪个是覆盖 nginx 配置的更好推荐方法。

为了帮助您的 elastic beanstalk 部署易于管理,请记住以下几点:

首先:AWS 不会直接更改您的 Elastic Beanstalk 生产环境中的任何配置。同样,您也不应直接在生产弹性 beantalk 环境中进行任何更改。

AWS 建议您更改开发环境中的配置,并 redeploy via the console or via the Elastic Beanstalk Command Line Interface (CLI) 当您希望更改生效时。这与容器化与否、负载平衡与否、elastic beanstalk nginx 配置文件或覆盖选项无关。

第二个:从您提供的第一个link开始:您要么使用elastic beanstalk默认nginx配置要么覆盖在 .ebextensions 中配置。没有两者的混合。这应该有助于减少您的困惑。当您在开发环境中对其中任何一个进行更改时,此更改意味着应用程序的新版本,您需要将其部署到生产环境中才能生效。

第三:nginx 可以充当您的原始服务器的代理,并且原始服务器可能指示资产的缓存过期。如果需要,有多种方法可以更改 nginx 配置上的配置以覆盖 origin 设置。来自 NGINX caching guide:

By default, NGINX respects the Cache-Control headers from origin servers. It does not cache responses with Cache-Control set to Private, No-Cache, or No-Store or with Set-Cookie in the response header. NGINX only caches GET and HEAD client requests.

我希望这有助于解决问题。部署您的应用程序并牢记这些技术,继续进行部署。如果错误,请删除它并重试。

如果遇到困难,请询问有关您的应用程序和特定配置的更具体的问题。您对问题提供的详细信息越多,我们就能为您提供更好的帮助。