在AWS ElasticBeanstalk Nginx中使用gzip

5tmbdcev  于 2022-12-26  发布在  Nginx
关注(0)|答案(3)|浏览(224)

我有一个AWS EB环境的Python 3.7运行亚马逊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]\.";
    • EDIT:**我使用SSH连接到我的eb示例,发现此文件位于/etc/nginx/conf.d/gzip.conf,内容与我上传的内容相同。此路径是否正确以启用gzip?

任何帮助将不胜感激!

h5qlskok

h5qlskok1#

    • 大创意**:要完全控制nginx配置,需要覆盖项目目录中.platform/nginx/nginx.conf文件中的默认设置。
    • 溶液**:我使用ssh获得了nginx.conf的副本,将其添加到项目目录.platform/nginx中,注解掉gzip的原始设置,并添加了新的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;

部署后,终于起作用了!希望这对其他有同样问题的人有帮助。
感谢@Marcin建议使用ssh进入我的示例,这帮助我弄清楚了发生了什么。

mkh04yzy

mkh04yzy2#

@Parzival的另一种解决方案是,您可以覆盖应用程序配置文件,而不是覆盖根nginx配置。
要获取应用程序配置文件,请将 * ssh * 导入示例并从以下位置获取配置文件:第一个月
我的是这样的:

location / {
    proxy_pass          http://127.0.0.1:8080;
    proxy_http_version  1.1;

    proxy_set_header    Connection          $connection_upgrade;
    proxy_set_header    Upgrade             $http_upgrade;
    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
}

将其保存到我的项目中,位置为:.platform/nginx/conf.d/elasticbeanstalk/00_application.conf
编辑了一下,加上了我需要的:

location / {
    # Base config from elasticbeanstalk:
    proxy_pass          http://127.0.0.1:8080;
    proxy_http_version  1.1;

    proxy_set_header    Connection          $connection_upgrade;
    proxy_set_header    Upgrade             $http_upgrade;
    proxy_set_header    Host                $host;
    proxy_set_header    X-Real-IP           $remote_addr;
    proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;

    # Add forwarded protocol and port details
    proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    proxy_set_header X-Forwarded-Port $http_x_forwarded_port;

    # Override gzip directive in server block
    gzip on;
    gzip_comp_level 5;
    gzip_types text/* application/json application/javascript application/x-javascript application/xml application/xml+rss;
}

然后,创建一个新的bundle并部署它,Beanstalk将使用您自定义的00_application.conf而不是默认的00_application.conf
注:

  • 我添加了 * protocol * 和 * port * 转发,与此问题无关,但仍值得分享
  • 我编辑了gzip_types设置text/*,根文件中的默认配置是:
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
qncylg1j

qncylg1j3#

我用我留在.platform/hooks/predeploy上的一个小脚本修复了这个问题。
代码片段如下。

#!/usr/bin/env bash
set -e

echo Forcing gzip on.
sed -ri 's/gzip([ \t]+)off[ \t]*;/gzip\1 on;/' /var/proxy/staging/nginx/nginx.conf

相关问题