繁体   English   中英

如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip

[英]How do you enable gzip of HTML/JavaScript/CSS on Amazon Beanstalk and Tomcat

我想在我的战争中对 JavaScript、HTML、CSS 进行 gzip,然后再通过网络。 标准的网络东西。 Beanstalk 使用 AMI 进行扩展。

我看到了有关如何创建新 AMI 的说明,但我什至看不到 Tomcat 所在的位置。 在撰写本文时,当前的 AMI 是 ami-1a249873,用于 Tomcat 7 部署。

我会自己回答这个问题。 每个人都很清楚,您可以连接到您的 EC2 实例,即使它们是由 beanstalk 管理的。 这很有帮助,因为您可以看到事物所在的位置。 在这种情况下,我不知道 Apache 被用作 tomcat 的网络服务器,因此不得不搜索它,但您可以像今天一样在这里找到它:

/etc/httpd

一旦你找到这样的信息,就进行更改:
http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html

如果您在项目的根目录下创建一个名为 .elasticbeanstalk 的文件夹,然后创建一个名为 myapp.config 的文件。

设置阿帕奇:

cp conf/httpd/conf.d/enabledeflate.conf /etc/httpd/conf.d/enabledeflate.conf

然后使用以下内容创建 enabledeflate.conf:

SetOutputFilter DEFLATE
# mod_deflate configuration
<IfModule mod_deflate.c>
    # Restrict compression to these MIME types
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xml+rss
    AddOutputFilterByType DEFLATE application/x-javascript
    AddOutputFilterByType DEFLATE text/javascript
    AddOutputFilterByType DEFLATE text/css
    <IfModule mod_headers.c>
        # Make sure proxies don't deliver the wrong content
        Header append Vary User-Agent env=!dont-vary
    </IfModule>
</IfModule>

一些注意事项:
第一次部署时,您可能需要重新启动 apache。
确保将 .elasticbeanstalk 放在 war 文件(或 git repo)的根目录中

添加到詹姆斯的答案

更简洁的方法是创建一个配置文件

.ebextensions/wsgi_custom.config

把这个放在那里

files:
  "/etc/httpd/conf.d/wsgi_custom.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIPassAuthorization On

      LoadModule deflate_module modules/mod_deflate.so

      SetOutputFilter DEFLATE

      # mod_deflate configuration
      <IfModule mod_deflate.c>
          # Restrict compression to these MIME types
          AddOutputFilterByType DEFLATE text/plain
          AddOutputFilterByType DEFLATE text/html
          AddOutputFilterByType DEFLATE application/xhtml+xml
          AddOutputFilterByType DEFLATE text/xml
          AddOutputFilterByType DEFLATE application/xml
          AddOutputFilterByType DEFLATE application/xml+rss
          AddOutputFilterByType DEFLATE application/x-javascript
          AddOutputFilterByType DEFLATE text/javascript
          AddOutputFilterByType DEFLATE text/css
          <IfModule mod_headers.c>
              # Make sure proxies don't deliver the wrong content
              Header append Vary User-Agent env=!dont-vary
          </IfModule>
      </IfModule>

我还添加了 WSGIPassAuthorization On 以防您需要使用 jwt auth 将此用于 django-rest-framework

没有比http://www.tonmoygoswami.com/2013/05/how-to-enable-gzip-on-amazon-elastic.html更好的地方

为您解答

您可以从https://console.aws.amazon.com/elasticbeanstalk/重新启动服务器

单击应用程序名称,然后从右上角单击操作下拉按钮并“重新启动服务器”

似乎有几种方法可以做到这一点,但没有完整的复制和粘贴解决方案。 所以这是我的,工作没有任何问题。

创建文件.ebextensions/01-environment.config

添加了以下内容:

# Enable Server-side Compression
files:
  "/etc/httpd/conf.d/enable_mod_deflate.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
        <IfModule mod_deflate.c>
            AddOutputFilterByType DEFLATE text/plain
            AddOutputFilterByType DEFLATE text/html
            AddOutputFilterByType DEFLATE application/xhtml+xml
            AddOutputFilterByType DEFLATE text/xml
            AddOutputFilterByType DEFLATE application/xml
            AddOutputFilterByType DEFLATE application/xml+rss
            AddOutputFilterByType DEFLATE application/x-javascript
            AddOutputFilterByType DEFLATE text/javascript
            AddOutputFilterByType DEFLATE text/css

            DeflateCompressionLevel 9

            BrowserMatch ^Mozilla/4 gzip-only-text/html
            BrowserMatch ^Mozilla/4\.0[678] no-gzip
            BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html

            <IfModule mod_headers.c>
                # Make sure proxies don't deliver the wrong content
                Header append Vary User-Agent env=!dont-vary
            </IfModule>

        </IfModule>

container_commands:
  02_restart_apache:
    command: sudo apachectl restart

这有什么作用?

  1. 使用正确的权限创建文件/etc/httpd/conf.d/enable_mod_deflate.conf
  2. 在文件中添加压缩内容
  3. 最后创建一个container_commands (链接到这里这里的命令区别),以重新启动apache服务器。 这是显示效果所必需的,并且也很重要,就像您正在自动缩放并且启动另一个实例一样,这也将创建此文件,然后在新实例上重新启动 apache。 如果没有这个,实例将不会重新启动并且需要手动重新启动。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM