在 AWS ElasticBeanstalk Nginx 中使用 gzip

Par*_*val 10 gzip nginx amazon-web-services amazon-elastic-beanstalk

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

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

-- .ebextensions
-- .platform
   -- nginx
     -- conf.d
        -- gzip.conf
-- (other files)
Run Code Online (Sandbox Code Playgroud)

我尝试添加一个配置文件来.ebextensions创建一个.conf启用 gzip 压缩的文件,但它似乎不起作用。我也尝试将代理切换到 Apache,但没有成功。教程说,对于最新版本的 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]\.";
Run Code Online (Sandbox Code Playgroud)

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

任何帮助将不胜感激!

Par*_*val 10

大想法:要完全控制 nginx 配置,您需要覆盖.platform/nginx/nginx.conf项目目录中文件中的默认设置。

问题:当我 ssh 进入我的 EB 实例时,我发现文件中/etc/nginx/nginx.conf仍然包含默认设置gzip off。由于某种原因,我的该文件的扩展名没有覆盖此设置。我想这是因为在 Amazon Linux 2 中,代理配置应该位于.platform/nginx目录下。

解决方案:我使用ssh获取 的副本nginx.conf,将其添加到我的项目目录中.platform/nginx,注释掉 gzip 的原始设置,并添加新的 gzip 设置。以下是我更新的文件的片段nginx.conf

#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;
Run Code Online (Sandbox Code Playgroud)

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

感谢 @Marcin 建议 ssh 进入我的实例,这帮助我弄清楚发生了什么。

  • 您永远不应该接触 ElasticBeanstalk 实例上的任何内容。由于扩展,这些实例不断上升和下降,并且配置文件更改将丢失。您应该使用 .ebextentions 执行此操作 (5认同)
  • @Peter 不,这不是我推荐的。我正在谈论 ssh-ing 进入我的实例如何帮助我找出解决方案(并获取原始 nginx.conf 文件的副本),而不是 ssh-ing 更改文件。希望这能澄清这一点 (3认同)