使用nginx-http-concat优化网站响应
前言:
我们在访问淘宝的时候,会看到代码中的js和css文件是通过一次请求或得的,我们知道浏览器一次请求只能并发访问数个资源,这样的处理错输在网络传输层面可以大大节省时间,这里使用的技术就是把css、js等静态资源合并为一个资源。淘宝使用的tengine是基于nginx的web服务器,从11年底开源。所使用的是mod_concat模块,合并多个文件在一个响应报文中。
http1.1下浏览器的并发访问资源数
IE6 2
IE7
2
IE8 6
Firefox2 2
Firefox3 6
Safari 3,4 4
Chrome 1,2
6
Opera 9.63,10.00alpha 4
一、 CENTOS下安装使用
安装nginx concat,由于此模块只能在linux环境中使用,在开发过程中如何在windows环境下使用在本文下面重点介绍。下面先介绍如何在CentOS中使用,由于此模块和nginx配合使用,而nginx一般都是由我们自己编译使用的,所以这里介绍自行编译方法,关于concat模块的具体使用技巧,网上很多文章介绍,反而在centos尤其在windows环境下如何搭建环境,至今没有一篇非常详细的文章,这也是自己汇总整理的初衷,如果网上有现成的教程,我们自己真的就懒得写了(我们都是懒人一枚)
1.安装nginx concat
# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
#wget https://github.com/alibaba/nginx-http-concat/archive/master.zip -O nginx-http-concat-master.zip
# unzip nginx-http-concat-master.zip
# tar -xzvf nginx-1.4..tar.gz
# cd nginx-1.4.
vi auto/cc/gcc
#将这句注释掉 取消Debug编译模式 大概在174行
#CFLAGS="$CFLAGS -g"
我们再配置下nginx编译参数
./configure --prefix=/usr/local/app/nginx --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --add-module=../nginx-http-concat-master
make
make install
当然别忘记增加用户和用户组
#/usr/sbin/groupadd -f www
#/usr/sbin/useradd -g www www
至此组件和nginx编译完成
2.nginx conf调整
Nginx的控制文件有不同的写法,我的配置文件使用了vhost所以在location段增加如下即可。
concat on;
concat_max_files ;
concat_unique off;
concat_types text/css application/javascript;
例子如下:
## Try the requested URI as files before handling it to PHP.
location / { ## Regular PHP processing.
location ~ \.php$ {
root /home/webroot;
try_files $uri =;
fastcgi_pass 127.0.0.1:;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
#added by james for test
fastcgi_buffer_size 128k;
fastcgi_buffers 256k; # up to 1k + * 1k
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_max_temp_file_size ;
proxy_buffering off;
gzip off; fastcgi_connect_timeout ;
fastcgi_read_timeout ;
fastcgi_send_timeout ;
} if ($request_uri ~* "system/dict"){
rewrite ^/(.*)/(.*)/(.*)/(.*)$ /$/index.php last; break;
}
if ($request_uri ~* "system/menu"){
rewrite ^/(.*)/(.*)/(.*)/(.*)$ /$/index.php last; break;
}
if (!-e $request_filename) {
rewrite ^/(.*)/(.*)/(.*)$ /$/index.php last; break;
} concat on;
concat_max_files ;
concat_unique off;
concat_types text/css application/javascript;
} # / location
重启ninx应用即可生效。
#Killall nginx
#nginx
3.页面写法
Concat需要使用两个?来标明作用域,具体的使用细节网上很多文章已经介绍的很详细了,这也不是本文的重点,这里只是给出一个示例。注意啊,css要在上面啊,不清楚的自己搜索下http请求优化。
<link rel="stylesheet" type="text/css" href="/??ui/easyui/themes/icon.css,ui/easyui/themes/default/easyui.css,console/portal/resources/css/style.css">
<script type="text/javascript" src="/ui/easyui/??jquery.min.js,jquery.easyui.min.js"></script>
二、 在windows 下的使用
是不是觉得上面很简单啊,我也觉得,但是在windows下就悲催了,concat只能在linux环境下,但是现在一般我们的开发环境就是在windows下,调试起来非常不方便,这就需要我们有一个可以在windows 下编译进去concat模块的nginx.exe,怎么办,只能自己编译了,因为大家实际项目中采用的nginx中的编译参数千差万别,不可能从网上下载一个别人编译好的就能用的。
在windows下我们需要使用cygwin,具体这个软件如何使用,教程一大把,我们就用它来作为一个linux通向windows的桥梁。
1. 安装cygwin
从网上可以下载已经集成了一部分组件的软件或者是自己下载的都行,这里需要注意的是,因为我们在实际使用中,在不同的时候需要不同的组件,因此迫切需要一个类似在CENTOS中的yum中的东西,在cygwin中还真有,叫做apt-cyg
lynx -source rawgit.com/transcode-open/apt-cyg/master/apt-cyg > apt-cyg
install apt-cyg /bin
Example use of apt-cyg:
apt-cyg install nano
当然apt-cyg还有很多功能,自己apt-cyg –help
2. 在cygwin中编译nginx
搭建好cygwin环境中,我们看到大部分的操作和linux中操作不大,但是我们一旦用上,会发现很多地方有一些小的差异,比如vi我们的上下键和退回键完全不生效,产生了一堆莫名其妙的ABCD,我也是尝试了半天不起作用,没办法用了vim,哎还真还用,别纠结vi了用vim,难怪linux中很多人也说vim更好用。
在编译nginx之前我们需要下载一些包,这些当然是用apt-cyg install了,但是注意一些不能一起安装,那就一个一个安装好。
- openssl、pcre、zlib、automake 、bison 、curl-devel 、flex 、libiconv 、libmcrypt-devel 、libtool 、libxml2 、libxml2-devel 、patchutils 、pcre-devel 、jpeg 、libmcrypt 、libpcre-devel、openssl-devel
在安装的时候如果还提示缺少包,那按照提示安装对应的包即可。
2.1 下载安装nginx
# cd /usr/local/src/
# wget http://nginx.org/download/nginx-1.4.2.tar.gz
#wget https://github.com/alibaba/nginx-http-concat/archive/master.zip -O nginx-http-concat-master.zip
# unzip nginx-http-concat-master.zip
# tar -xzvf nginx-1.4..tar.gz
# cd nginx-1.4.
vi auto/cc/gcc
#将这句注释掉 取消Debug编译模式 大概在174行
#CFLAGS="$CFLAGS -g"
#我们再配置下nginx编译参数
以上我们和在centos中完全一样,但是注意接下来我们在编译的时候—prefix参数不能指定死,因为如果我们在这里指定类似/usr/local的路径,那我们只能在cygwin环境中使用了,但是我们是要在windows中使用,这里就必须使用相对地址,也也是为什么后面我们的程序文件不能随便在windows下的盘符的原因。这里给出我的编译参数
./configure \
--prefix=. \
--user=www \
--group=www1 \
--with-http_stub_status_module \
--with-http_ssl_module \
--add-module=../nginx-http-concat-master
2.2 用户和组处理
先不要执行,这里我们使用的用户www和组www1还没有建立,但是在cygwin中没有useadd和groupadd找了很多资料,中文的基本没有才搞清楚,cygwin是使用的windows的用户和组,这里我们先在windows中建立用户www和组www1,为什么组是www1,万恶的windows竟然不让组和用户一个名,不过没关系
然后在cygwin中执行,就是把windows中的用户和组同步到cygwin中
mkpasswd -l > /etc/passwd
mkgroup -l > /etc/group
执行完毕后cat下passwd和group看用户和组导入进去没有
2.3 编译make错误处理
这里大家可能会遇到各种问题,我的编译没问题在make阶段报错提示ngx_user.c文件中的crypt错误,找了很多资料没有发现大家和我一样的问题,既然是crypt肯定是加密,检查了crypt包也安装了(apt-cyg install crypt),最后直接修改了源码的c文件把加密的这步省略了,就过去了。
原始文件:
value = crypt((char *) key, (char *) salt);
直接修改为:
value = (char *) salt);
3. 使用nginx.exe
我们把编译好的nginx.exe直接copy到我们的wnmp环境中,替换nginx文件后是不能直接使用的会提示缺少很多dll的,按照提示把这些dll拷贝到和nginx同级的目录即可,我们的是这些dll
启动后虽然没有报错,但是页面报404,我们运行nginx.exe –t发现提示连接数错误,这里有很多修改办法,由于开发环境没有那么多连接数,直接修改nginx.conf修改为64
worker_connections 64;
启动,OK,运行info.php没问题,一切正常。但是别高兴,后面还有问题,因为我们在windows的开发环境下,我们的配置参数一般都是d:\work\类似的路径,info.php能运行起来,我们的项目不一定能运行起来,因为我们之前编译使用的相对路径,因为../d:\abc实际上是不能运行的。因为我们需要将我们的工程文件放入到html文件中,同时我们对应的配置nginx.conf文件修改对应的工程路径即可。
使用nginx-http-concat优化网站响应的更多相关文章
- 通过python统计nginx日志定位php网站响应慢的问题
# 公司网站反映很慢,可能是一些页面的访问方法或者页面引起,通过程序统计nginx访问日志的页面和具体的action方法访问次数以及平均响应时间可以为程序开发的同事提供参考定位具体的代码 # 默认的n ...
- Nginx服务器性能优化与安全配置实践指南
转载自:https://www.bilibili.com/read/cv16151784?spm_id_from=333.999.0.0 1.引言 1.1 目的 为了更好的指导部署与测试艺术升系统ng ...
- Nginx配置性能优化
大多数的Nginx安装指南告诉你如下基础知识--通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- Nginx配置性能优化(转)
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了.而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能 ...
- Nginx web服务优化 (一)
1.Nginx基本安全优化 a.更改配置文件参数隐藏版本 编辑nginx.conf配置文件增加参数,实现隐藏Nginx版本号的方式如下.在nginx配置文件nginx.conf中的http标签段内加入 ...
- nginx web服务优化
nginx基本安全优化 1. 调整参数隐藏nginx软件版本号信息 软件的漏洞和版本有关,我们应尽量隐藏或消除web服务对访问用户显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就 ...
- Linux实战教学笔记38:企业级Nginx Web服务优化实战(下)
四,Nginx站点目录及文件URL访问控制 4.1 根据扩展名限制程序和文件访问 Web2.0时代,绝大多数网站都是以用户为中心多的,例如:bbs,blog,sns产品,这几个产品都有一个共同特点,就 ...
- Linux实战教学笔记37:企业级Nginx Web服务优化实战(上)
一,Nginx基本安全优化 1.1 调整参数隐藏Nginx软件版本号信息 一般来说,软件的漏洞都和版本有关,这个很像汽车的缺陷,同一批次的要有问题就都有问题,别的批次可能就都是好的.因此,我们应尽量隐 ...
- 企业级Nginx Web服务优化实战
web优化一览总结表 优化类型 优化说明 优化方法 安全优化 隐藏nginx版本信息优化 修改nginx配置文件实现优化 server_tokens off: 修改nginx版本信息优化 修改ngin ...
随机推荐
- PHP疑惑
<?php $a = array(); $a[0] = 1; $a[1] = 2; $b = (object)$a; var_dump($b); 怎么从对象$b 中取值??? <?php ...
- Python模拟C++输出流
看到一Python例子,挺有意思的,用Python模拟C++的输出流OStream.单纯只是玩. 原理: 利用Python __lshift__左移内建函数<<,调用时将输出内容,如果内容 ...
- day7----面向对象编程进阶
本节内容: 面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 静态方法 它与类唯一的关联就是需要通过类名来调用这个方法 #静态方法实际跟类没关系,不 ...
- 在CS代码页获取input输入框内肉----.net学习点滴
想在后台cs页面得到前台页面aspx中html控件input输入的值.通过访问input输入框的name属性值获取. 解决方法如下: 1.用Request["user"].toSt ...
- Orchard Platform v1.7.2 发布
发布说明: 1. 添加Json格式数据文件支持.2. 删除了Settings, Modules, Themes模块中的Routers和Controllers.3. 删除了默认的ContentType, ...
- java环境配置笔记
1.使用Eclipse,要安装jdk,jdk现在可用1.7版本 2.打开Eclipse,配置maven,打开window-preferencess,在maven-user settings处,设置ma ...
- iOS开发常用的第三方类库
在iOS开发中不可避免的会用到一些第三方类库,它们提供了很多实用的功能,使我们的开发变得更有效率:同时,也可以从它们的源代码中学习到很多有用的东西. Reachability 检测网络连接 用来检查网 ...
- SRS文档 软件需求说明书
[摘要] 随着信息时代科技的飞速发展,经济全球化已广为人知,英语作为全球最主要的语言之一,受到越来越多的人的喜爱,不仅为了增长知识,也为了能适应社会发展的需求.但是,学英语最重要的事首先是积累词汇,没 ...
- 团队项目--站立会议 DAY2
小组名称:D&M 参会人员:张靖颜,钟灵毓秀,何玥,赵莹,王梓萱 项目进展: 1,张靖颜:进行了对需求的分析,将项目框架搭建进行完善,辅助编写代码. 2,钟灵毓秀:相关功能的代码的完善,进行一 ...
- Android开发学习总结(六)—— APK反编译
学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译.我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或 ...