15053971836 注册 / 登录

apache开启gzip

时间: 阅读:254
apache开启gzip

最佳回答

失控的影子

失控的影子

2023-01-13 01:06:59

服务器设置 gzip 压缩是 web 开发里很普遍的做法。假设你要请求一个 100k 的文件,网络传输速度为 50k/s,需要 2s 才能得到数据,但是如果在服务器设置了 gzip 压缩,将服务端的文件压缩到了 50k(实际上的压缩率往往小于 50%),这时候只需 1s 就能得到数据,然后在客户端解压即可。

可以对比下同一个文件在开启 gzip 前后的大小。

gzip 压缩前:

gzip 压缩后:

那么如何在服务端开启 gzip 服务呢?这里以 apache 为例简单介绍下。

打开 apache 的 "httpd.conf" 文件,比如我的是在 "C:wampinapacheApache2.2.21conf" 目录下。找到以下这一行,将它前面的注释(#)去掉:

很多参考文件都提到同时要对 LoadModule headers_module modules/mod_headers.so 去掉注释,说 "如果不开启这个,那网站就不能正常显示了" ,不过我在测试过程中没有去掉也没有问题。

接着再添上以下代码:

这样就能对所有文件进行 gzip 压缩了。压缩等级是个 1-9 之间的整数,取值范围在 1(最低) 到 9(最高)之间,不建议设置太高,虽然有很高的压缩率,但是占用更多的CPU资源。(本地测试了下 1 和 9 压缩率差不了多少...)

实际开发中我们并不需要对所有文件进行压缩,比如我们无需对图片文件进行 gzip 压缩,因为图片文件(一般为 jpg、png等格式)本身已经压缩过了,再进行 gzip 压缩可能会适得其反(详见 图片要启用gzip压缩吗?绝对不要!,背景图片千万不要gzip压缩,尤其是PNG),类似的还有 PDF 以及音乐文件。所以我们可以设置过滤指定文件或者对指定文件进行压缩。

比如我们要对图片等特殊文件不进行 gzip 压缩处理:

或者指定文件格式进行压缩:

修改好后,保存 httpd.conf 文件,记得重启 apache,再刷新浏览器看请求,应该已经生效了!

最新回答共有5条回答

  • 建站最低500起
    回复
    2023-01-13 04:04:11

    关于apache和nginx的比较网上一大把,这里就不再复制了,但说apache性能差很多有点看不起老前辈了,毕竟apache发展这么多年,基本上该有的功能都有了,该处理的bug也都处理了,说apache是超稳定那是一点也不过份,这个靠时间堆积起来的底蕴是nginx这种后起之秀比不过的,但这也意味着现在apache身材臃肿,对新手来说感觉比较难上手。

    nginx比apache好的地方在于轻量级,配置简单,极易上手,尤其是其在处理高并发和反向代理方面比apache明显占优势,自然成了云虚拟主机和一些高并发场景下的首选。

    拿我个人而言,其实并遇到过多大的高并发场景,但自从用了nginx之后就用不回apache了,并不是因为nginx性能有多高,仅仅是因为配置简单而已。

    如果搭建新环境没有特殊要求,就用nginx吧。

  • 無畏
    回复
    2023-01-13 04:04:11

    我2008年开始使用nginx,2009年开始开发nginx模块,ngnix最大的特点是性能,是很好的c10k的实践。在nginx流行之前虽然还有lighttpd,squid,但那个时期apache的server模型是多进程和多线程,不管是什么场景,只要当前连接数过万,都是服务器的负载都是很高的。

    nginx的server模型是多进程io复用,一个进程可以同时处理过万个tcp连接,Linux使用epoll,bsd系使用kqueue这些基于事件驱动去实现io复用,同时nginx内部使用了非常高效的数据结构去管理这些链接,例如rbtree,这样使得管理十万以上的连接CPU消耗也可以有效控制。

    nginx是基于数据流去处理http数据的,因此nginx模块的开发并不容易,由于开源社区的努力,现在也存在好多nginx模块,几乎apache常用的模块nginx也有对应的模块,有几个关键的模块,例如ssl,ssi,url rewrite,gzip,这样nginx就可以很轻易取代apche的地位了。于此同时,nginx的反向代理也是特色之一,因此nginx不但取代了apache也在一些领域里取代了squid,主要是squid实在太老旧了。

  • 临沂网站建设
    回复
    2023-01-13 04:04:11

    Nginx性能要比Apache高,主要是由于网络IO模型选择不同,Nginx使用是最新的epoll网络I/O模型,而Apache使用的则是传统的select模型。Nginx是异步非阻塞,Apache是同步阻塞。

    同步与异步

    同步:同步是指调用者发起一个请求,直到请求返回结果之后,才进行下一步操作。简单来说,同步就是必须一件事一件事的做,等前一件做完了,才能做下一件事。

    异步:调用者发起一个请求,在没有得到返回结果之前,可以继续执行后续操作。异步相对同步来讲,二者的区别主要在于是否需要等待某操作的返回结果。

    阻塞与非阻塞

    阻塞:阻塞一般是指在调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会被唤醒执行后续的操作。

    非阻塞:非阻塞是指在调用结果没有返回之前,该调用不会阻塞住当前线程。

    epoll

    epoll是指当文件描述符的内核缓冲区非空的时候,发出可读信号进行通知,当写缓冲区不满的时候,发出可写信号的一种I/O事件通知机制,是linux 内核实现IO多路复用的一个实现。

    文件描述符数目没有上限:通过epoll_ctl()来注册一个文件描述符,内核中使用红黑树的数据结构来管理所有需要监控的文件描述符。基于事件就绪通知方式:一旦被监听的某个文件描述符就绪,内核会采用类似于callback的回调机制,迅速激活这个文件描述符,这样随着文件描述符数量的增加,也不会影响判定就绪的性能。维护就绪队列:当文件描述符就绪,就会被放到内核中的一个就绪队列中,这样调用epoll_weit获取就绪文件描述符的时候,只要取队列中的元素即可,操作的时间复杂度恒为O(1)。使用mmap加速内核与用户空间的消息传递。selectselect()的可移植性更好,在某些Unix系统上不支持poll()。select() 对于超时值提供了更好的精度:微秒,而poll是毫秒。单个进程可监视的fd数量被限制。需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内核空间在传递该结构时复制开销大。对fd进行扫描时是线性扫描。fd剧增后,IO效率较低,因为每次调用都对fd进行线性扫描遍

  • 游客
    回复
    2023-01-13 03:03:01

    比如你在浏览某网站上的图片,大小为500K,一般情况下你访问的这张图片你的电脑需要500K的下载流量,服务器也同样要流入500K的流量,然后如果启用了gzip压缩后,你访问的这张图片,服务器接收请求后使用gzip压缩完后在把内容返回给你的浏览器,然后浏览器自动解压,起到了在传输过程中大打降低了带宽。下面看如何安装配置gzip生成gzip压缩模块Apache的gzip功能是使用mod_deflate.so模块,因此,我们先生成mod_deflate.so模块。首先从网上下载一个Apache安装程序(尽量与当前使用的Apache版本相同)然后解压,我们解压到了tmp目录下[/php]#cd /tmp/httpd-2.2.11/modules/filters#/usr/local/apache/bin/apxs -i -c -a mod_deflate.c�0�2�0�2�0�2�0�2 //生成mod_deflate.so模块� #vi /usr/local/apache/conf/httpd.conf LoadModule deflate_module�0�2�0�2�0�2�0�2 modules/mod_deflate.so 设置gzip压缩打开Apache配置文件,然后添加如下三行内容 #vi /usr/local/apache/conf/httpd.conf AddOutputFilterByType DEFLATE text/html text/php text/png text/jpg text/plain text/css text/xml text/javascript DeflateCompressionLevel 9 SetOutputFilter DEFLATE 上述参数解释: