在 AWS ElasticBeanstalk Nginx 中使用 gzip

Posted

技术标签:

【中文标题】在 AWS ElasticBeanstalk Nginx 中使用 gzip【英文标题】:Using gzip in AWS ElasticBeanstalk Nginx 【发布时间】:2021-04-23 13:37:49 【问题描述】:

我有一个 Python 3.7 的 AWS EB 环境,运行 Amazon Linux 2/3.1.2,使用 nginx 作为代理服务器。我正在尝试为我的应用程序添加 gzip 压缩。我在网上尝试了几个教程,但它们似乎都不适合我。我也是 AWS 的新手,所以可能不熟悉它的一些服务。

目前,我有一个这样的目录树:

-- .ebextensions
-- .platform
   -- nginx
     -- conf.d
        -- gzip.conf
-- (other files)

我尝试在.ebextensions 中添加配置文件以创建.conf 以启用gzip 压缩,但它似乎不起作用。我也尝试将代理切换到 Apache,但没有运气。 This 教程说对于最新版本的 Amazon Linux 2,nginx 配置文件应该放在 .platform 文件夹中,所以我按照说明做了。但是,我的 gzip.conf 文件似乎仍然无法正常工作 - 文件仍以其原始格式呈现。

目前我的 gzip.conf

gzip on;
gzip_vary on;
gzip_min_length 10240;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/html text/css text/xml text/javascript application/x-javascript application/xml;
gzip_disable "MSIE [1-6]\.";

编辑:我通过 SSH 连接到我的 eb 实例,发现此文件位于 /etc/nginx/conf.d/gzip.conf,内容与我上传的相同。这条路径对启用 gzip 是否正确?

任何帮助将不胜感激!

【问题讨论】:

如果你ssh进入EB实例,你可以手动设置nginx使其工作吗?这样你至少可以确认你想使用的选项。 我遇到了类似的问题并写了一个要点总结如何更改 Amazon Linux 2 的 nginx 配置。您可以在这里找到它:gist.github.com/henhan/2943013c9064606425b0ee5bb1ca8c99 【参考方案1】:

在网上搜索了在 AWS 中使用 SSH 的指南后,我能够通过 ssh 进入我的 EB 实例,发现问题出在文件 /etc/nginx/nginx.conf 中,其中包含默认设置 gzip off。由于某种原因,我对这个文件的扩展没有覆盖这个设置。

感谢@Marcin 建议在 SSH 中设置。我得到了一份nginx.conf 的副本并将其添加到我的项目目录.platform/nginx 中,将gzip 的原始设置注释掉,并将其更新为以下内容:

#Original Settings
#gzip                  off;
#gzip_comp_level       4;
#gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;

#New Settings
gzip on;
gzip_static on;
gzip_comp_level 9;
gzip_proxied any;
gzip_types application/javascript application/rss+xml application/vnd.ms-fontobject application/x-font application/x-font-opentype application/x-font-otf application/x-font-truetype application/x-font-ttf application/x-javascript application/xhtml+xml application/xml application/json font/opentype font/otf font/ttf image/svg+xml image/x-icon text/css text/html text/javascript text/plain text/xml;

部署后,终于成功了!希望这能帮助其他有同样问题的人。

【讨论】:

您不应该触摸 ElasticBeanstalk 实例上的任何东西。这些实例由于扩展而不断上升和下降,配置文件更改将丢失。您应该使用 .ebextentions

以上是关于在 AWS ElasticBeanstalk Nginx 中使用 gzip的主要内容,如果未能解决你的问题,请参考以下文章

AWS::ElasticBeanstalk::ConfigurationTemplate 的 AWS CloudFormation 模板失败

在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis

从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS

如何在 AWS elasticbeanstalk 上部署 symfony 3 项目

强制 https aws elasticbeanstalk

如何在 Elasticbeanstalk 环境中运行的 docker 容器中承担 AWS 角色?