免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1978 | 回复: 1
打印 上一主题 下一主题

让nginx始终返回gzip内容 [复制链接]

论坛徽章:
54
2017金鸡报晓
日期:2017-02-08 10:39:42操作系统版块每日发帖之星
日期:2016-03-08 06:20:00操作系统版块每日发帖之星
日期:2016-03-07 06:20:00操作系统版块每日发帖之星
日期:2016-02-22 06:20:00操作系统版块每日发帖之星
日期:2016-01-29 06:20:00操作系统版块每日发帖之星
日期:2016-01-27 06:20:00操作系统版块每日发帖之星
日期:2016-01-20 06:20:00操作系统版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之江苏
日期:2015-12-21 20:00:24操作系统版块每日发帖之星
日期:2015-12-21 06:20:00IT运维版块每日发帖之星
日期:2015-11-17 06:20:002015亚冠之广州恒大
日期:2015-11-12 10:58:02
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-22 08:54 |只看该作者 |倒序浏览
一般来说,gzip压缩是否启用,除了服务器支持外,客户端也要支持。当客户端发送Accept-Encoding:gzip这个request header,服务器即认为其能接受gzip压缩,就响应一个Content-Encoding:gzip,并发送压缩内容;假如客户端没有发送 Accept-Encoding,那么服务器就把源代码老老实实地打印出去。

但这里就有个怪点子,能不能让客户端无论有没有发送Accept-Encoding,服务器都会发送压缩内容呢?

这有几个好处:

1、进一步节省带宽。
2、防止水平一般的爬虫抓页面偷数据。

经测试,此种做法并不会影响普通用户,因为他们都是用先进的浏览器上网的;另外,也不会影响主流的搜索引擎,收录仍然会正常。

要做到这点,需要有两个nginx,但也有办法配置两个虚拟主机就可以,不用启动两个nginx主进程。为了方便,我就以前后来区分它们。

前端nginx:

gzip压缩不在前端nginx进行,前端主要是用来强制修改request header,即写上:

   1. proxy_set_header Accept-Encoding 'gzip';

这样,后台的nginx无论如何都将接收到Accept- Encoding:gzip,而不管客户端有没有发。

完整的测试样本:

   1. upstream www.backend.sudone.com{
   2. server 127.0.0.1:80;
   3. }
   4. server {
   5. server_name www.sudone.com;
   6. listen 80;
   7.

   8. location / {
   9.   proxy_pass http://www.backend.sudone.com;
  10.   include proxy.conf;
  11.   proxy_set_header Accept-Encoding 'gzip';
  12. }
  13. }

注意proxy_pass到的upstream是www.backend.sudone.com,这是在一台机器上配置两个虚拟主机所必需的,否则不就是 个死循环吗?如果还是想用www.sudone.com,可以将前端的listen改成外网ip,后端就用127.0.0.1。

另外一个要注意proxy.conf里最好没有写过proxy_set_header Accept-Encoding,我的proxy.conf默认有将Accept-Encoding设为空的,这会造成配置重复。但 proxy_set_header不会冲突,可以按配置先后顺序生效,我一时忘了是前生效还是后生效,动手测一下便知。

后端nginx:

后端nginx才是负责压缩的,这里要注意gzip的版本,因为nginx是用http1.0方式作代理,因此gzip的版本就不能是默认的1.1版,改成1.0。

   1. server {
   2. server_name www.backend.sudone.com;
   3. listen 80;
   4.

   5. location / {
   6.   root /html/;
   7.   gzip on;
   8.   gzip_http_version 1.0;
   9. }
  10. }

这里就简单点了,gzip的其他参数我就不贴上来,想必大家都有现成的配置,留意下version就好。

配好后,测试一下:

   1. curl -I http://www.sudone.com

发现返回了Content-Encoding:gzip

不加-I参数呢?

   1. curl http://www.sudone.com

打印出一堆乱码,把SecureCRT的字符都给弄坏了。

http://www.sudone.com/nginx/nginx_gzip_always.html

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46寅虎
日期:2014-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
2 [报告]
发表于 2012-04-26 15:19 |只看该作者
启用压缩就是好,节省带宽!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP