如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip
Posted
技术标签:
【中文标题】如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip【英文标题】:How do you enable gzip of HTML/JavaScript/CSS on Amazon Beanstalk and Tomcat 【发布时间】:2013-01-09 23:37:35 【问题描述】:我想在我的战争中对 javascript、html、CSS 进行 gzip 压缩,然后才能通过网络。标准的网络东西。 Beanstalk 使用 AMI 进行扩展。
我看到了有关如何创建新 AMI 的说明,但我什至看不到 Tomcat 的位置。在撰写本文时,当前的 AMI 是 ami-1a249873,用于 Tomcat 7 部署。
【问题讨论】:
你能更具体地说明你在做什么吗?您正在创建一个 beanstalk 应用程序,但您指定了一个 ami?你在压缩什么? 我想在我的战争中对 javascript、html、css 进行 gzip 压缩,然后再通过网络。标准的网络东西。 beanstalk 使用 ami 来扩大规模。 【参考方案1】:我会自己回答这个问题。所有人都很清楚,您可以连接到您的 EC2 实例,即使它们是由 beanstalk 管理的。这很有帮助,因为您可以查看物品的位置。在这种情况下,我不知道 Apache 被用作 tomcat 的网络服务器,因此必须搜索它,但您可以像今天一样在这里找到它:
/etc/httpd
一旦您找到这样的信息,就会进行更改:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/customize-containers.html
如果您在项目的根目录下创建一个名为 .elasticbeanstalk 的文件夹,然后创建一个名为 myapp.config 的文件。
设置 Apache:
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)的根目录中
【讨论】:
对不起格式,我不知道如何在这里很好地格式化。 查看此帮助以了解有关格式化帖子的更多信息:***.com/editing-help 我喜欢这种方法,但是 YSlow 文档建议您不要压缩图像,因为它们已经被压缩了。 developer.yahoo.com/performance/rules.html#gzip 我删除了对图片的引用。 "Actions > Restart App Server(s)" 只重启tomcat。要重新启动 apache,您必须ssh
到每个服务器并运行 sudo apachectl restart
【参考方案2】:
没有比http://www.tonmoygoswami.com/2013/05/how-to-enable-gzip-on-amazon-elastic.html更好的地方了
为你解答
你可以从https://console.aws.amazon.com/elasticbeanstalk/重启服务器
单击应用程序名称,然后从右上角单击操作下拉按钮并“重新启动服务器”
【讨论】:
请注意,上面的链接建议使用 gzip 压缩 png、jpeg 和 gif,它们已经是压缩格式。这会浪费你服务器的 CPU 周期。 如果链接的网站消失,这里的想法是在您的应用程序包中包含适当的 .conf 文件,然后使用容器命令将其复制到位。但是,它要求您在部署后手动重新启动 apache。也许你也可以添加一个容器命令来做到这一点。【参考方案3】:补充詹姆斯的回答
更简洁的方法是创建一个配置文件
.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
【讨论】:
我按照你的描述做了,我的系统降级了。 (豆茎,雄猫) 我修复了它,找到了不同的解决方案,所以你把从似乎有几种方法可以做到这一点,但没有完整的复制和粘贴解决方案。所以这是我的,工作没有任何问题。
创建文件.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
这是做什么的?
-
创建具有正确权限的文件
/etc/httpd/conf.d/enable_mod_deflate.conf
在文件中添加压缩内容
最后创建一个container_commands
(链接到这个和命令here的区别),重启apache服务器。这是显示效果所必需的,并且也很重要,就像您正在自动缩放并且启动另一个实例一样,这也将创建此文件,然后在新实例上重新启动 apache。如果没有这个,实例将不会重新启动,需要手动重新启动。
【讨论】:
以上是关于如何在 Amazon Beanstalk 和 Tomcat 上启用 HTML/JavaScript/CSS 的 gzip的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 .ebextensions 在 Amazon Elastic Beanstalk 中运行“npm install”
如何在 Amazon 的 Elastic Beanstalk 上安装 Python 脚本?
如何在启用默认 EBS 加密的情况下使用 Beanstalk?
如何使用 Amazon linux 2 在 Elastic beanstalk 中使用多容器 docker?
如何通过 virtualenv 在 Amazon 的 Elastic Beanstalk 上使用最新版本的 python (3.6)