最近在做一个网站项目,功能基本已经完成,目前主要的难点在于性能的调优上,其实网站第一期已经上线,目前正在进行第二期的改版中,而性能也归为第二期的重点。
第一期的主要任务是功能的实现,因此并未在性能上进行过多的考虑,最终第一期上线就是直接lighttpd + fastcgi + django + memcached + mysql,只考虑了后台数据库缓存,web前端没有做任何优化,因此二期性能优化的重点在于页面缓存。
由于站点本身的业务比较简单,对于数据的实时性要求不是很高,因此网站性能可优化程度较高,而对于网站前端优化的主体方案,无非就是页面静态化,或者是反向代理做缓存(如squid),经过多次讨论以及测试,页面静态化最终成为我们的首选方案。
决定使用页面静态化后,如何进行静态化策略就成了主要的话题,而在第一次请求时动态生成页面并进行静态化得到了小组内成员的一致的赞成。
我们第一期是使用的lighttpd作为WEB服务器,但是lighttpd却不能满足我们首次请求生成静态页面,因为lighttpd在请求一个无效静态资源后,无法自动再进行一次有效的动态请求(也许是我不知道如何配置),因此决定在lighttpd前面再加一个针对于静态资源请求的nginx。
为什么选择nginx?原因太多了,nginx速度快就不用说了,而它的配置却更是灵活,相比lighttpd就显得相对单薄了,nginx还可以在配置中嵌入perl脚本,更是大大增加了前端处理请求的能力。当然,nginx的缺点也是有的,总之没有最好的软件,只有最适合的软件。
Nginx最新版本0.7.52(非稳定版),也是目前我们正在使用的版本,选择这个版本的主要原因就是0.7版本以后,nginx才加入一个try_files指令,而这个指令的作用就是可接收多个路径作为参数,当前一个路径的资源无法找到,则自动查找下一个路径,而这个功能正是我们所需要的功能,既当第一次请求时,静态资源不存在,那么我们就将请求proxy到后台服务器上进行动态处理,返回响应同时生成静态文件,下次请求即可通过try_files的第一个参数直接定位,而nginx的静态资源响应速度,相信不用我说,大家都清楚了,大致的配置如下:
location ~ / {
root /.../.../...; //设置根目录
try_files /$filepath @to_other; //第一个文件路径为root+/$filepath
}
上面第一个文件找不到,则跳转到@to_other
location @to_other{
proxy_pass http://127.0.0.1:8080; //请求转发
}
配置是否很简单?如此就可以满足我们的基本需求了。当然,这仅仅是一个简单的例子,我们还可以直接在配置中使用if语句,进行一些简单的判断,可惜目前的版本所支持的if语句只能够做一次判断,不能and or。不过nginx也同时提供了嵌入perl的功能,所以我们实际可以在配置中做很多事情,比如,我们静态文件生成后,什么时候失效呢?因为当静态文件生成后,我们的请求最终只会被nginx拦截,按照很多人的做法,那就是在服务器加上一个后台进程,该进程进行静态文件的失效判断,并删除,但是这种方式的弊端很大,先不说其他的,单是在性能上就会有很大影响,当然,你可以在非高峰期做,只是这种做法效果其实并不好。
那如何通过nginx实现这一步呢?其实很简单,我们可以通过前面说的,在nginx里嵌入perl脚本,每当请求来的时候,根据请求获得静态文件路径并读取文件更新时间,和当前系统时间进行对比,超过失效时间则算失效,而对于失效的文件最好的办法不是删除,而是通过更改上面try_files指令所指向的文件路径,给一个假路径它,即可让请求直接转向后台,由后台重新生成一个相同的文件,并覆盖即可,配置内容大致如下:
perl_set $data_filename '
use nginx;
use URI;
sub {
my $r = shift;
my $xmldatahome = "/.../.../"; //xml文件目录
my $re = $r->path."xml"; //根据uri生成文件名
if(-f $xmldatahome.$re){
//获得更新时间,并判断失效
if(time() - stat($xmldatahome.$re)->mtime > 1800){
return "";
}
}
return $re;
}';
location ~ / {
root /.../.../...; //设置根目录
try_files /$data_filename @to_other;
}
以上的配置就是通过perl代码生成文件名,如果文件不存在或者超过1800分钟,则请求跳转到@to_other,是否很简单很灵活?
看到这里,应该可以看出,nginx的配置可以有多灵活,可惜的是嵌入perl代码还只是在实验阶段,稳定性很难保证,因此不应该将过多复杂的判断通过它来完成,而且也不赞成在前端web服务器做复杂的逻辑,同时嵌入perl脚本目前所能获取的请求的数据也比较有限,目前我们通过nginx所做的也仅仅是一些简单的和静态化资源相关的判断。
现在我们的整体架构就是在原有的基础上前面增加了一层nginx作为静态请求过滤,后端lighttpd的压力被降至最低。
也许有的朋友会问,nginx也可以直接请求fastcgi,为什么后面还要加一个lighttpd?关于这个问题其实主要原因在于我们对于nginx的稳定性有所顾忌,毕竟也是第一次用,所以并没有直接用nginx请求fastcgi,而是沿用了旧的方式,同时暂时也不想做太大的改变。
目前还没提交测试组进行压力测试,所以无法得知在性能上提升会有多大,我也在拭目以待。
分享到:
相关推荐
Nginx是一款高性能的HTTP和反向代理服务器,广泛应用于静态资源的托管,因为它具有出色的负载能力和网络资源的高效使用,而通过配置静态页面压缩和缓存过期时间,可以进一步优化服务器性能和用户体验。在服务器架设...
3. 静态IP配置:通过编辑`/etc/network/interfaces`(Ubuntu)或`/etc/sysconfig/network-scripts/ifcfg-eth0`(CentOS)文件设定静态IP。 四、Web服务器搭建 1. Apache或Nginx:根据需求选择适合的Web服务器,如...
高性能服务器集群的架设及优化笔记 服务器集群架设是指将多个服务器组合成一个集群,以提高服务器的性能和可扩展性。...通过服务器集群架设、优化和 troubleshoot,可以提高网站的响应速度和可用性。
8. **缓存和性能优化**: 高性能HTTP架设工具可能包含缓存机制,如Nginx的缓存模块,可以加速静态内容的交付,减少服务器负载。 9. **反向代理与负载均衡**: 反向代理能隐藏后端服务器,提高安全性,同时可以实现...
在Ubuntu Linux系统中,搭建基于Nginx的Web服务器是一个高效的选择,因为它以其高性能和低内存占用而闻名,尤其在处理静态内容和反向代理方面表现突出。与Apache相比,Nginx通常更适合高并发场景。以下是搭建Nginx+...
10. **网站优化**:如缓存技术(如Redis或Memcached)、页面静态化、数据库优化策略等。 11. **网站部署与维护**:包括代码版本控制(如Git)、服务器配置、负载均衡、日志分析等。 12. **RESTful API设计**:构建...
在个人电脑上架设服务器,即单机架站,是一个技术性强且有趣的过程,它可以用于测试、学习或作为小型项目的本地服务器。以下是一份详细的单机架站全攻略,涵盖了从选择硬件到配置软件的各个步骤。 首先,硬件是基础...
总的来说,"云主机论坛架设的初始资源包" 提供了一个快速启动在线社区的解决方案,涉及到的技术点包括云主机的选择与管理、Web服务器配置、数据库集成、安全策略以及性能优化等多个方面。正确理解和运用这些知识,将...
在IT行业中,网站高并发架设是至关重要的一个领域,特别是在大型互联网应用或者高流量的电商网站中。本教程以“PHP教程进阶 网站高并发架设第一讲”为主题,旨在帮助开发者理解并掌握如何利用PHP来构建能够处理大量...
在现代社会,个人服务器的架设已经不再仅仅是专业人士的专利,许多技术爱好者和小型企业也开始尝试自行搭建个人服务器,以满足数据存储、网站托管、远程办公等需求。本全攻略将详细解析个人服务器架设的各个环节,助...
《个人服务器架设全攻略》是一本面向初学者的实用指南,旨在帮助用户从零开始构建自己的个人服务器,包括Web网站、FTP服务器以及个人邮局服务器。这份资源以CHM(Compiled HTML Help)格式提供,方便用户下载后离线...
KYXSCMS,灵活,方便,人性化设计简单易用是最大的特色,是快速架设小说类网站首选,只需5分钟即可建立一个海量小说的行业网站,批量采集目标网站数据或使用数据联盟,即可自动采集获取大量数据。内置标签模版,即使...
3. **静态资源优化**:对CSS、JavaScript、图片等静态资源进行压缩、合并、最小化,可以减少文件大小,进而缩短加载时间。同时,使用HTTP/2协议的多路复用特性,可并行加载多个资源,提高页面渲染效率。 4. **...
【个人电脑架设服务器】 随着互联网技术的发展,越来越多的用户拥有了宽带接入,这使得个人电脑成为一台互联网服务器成为可能。即使是使用上行带宽相对较小的ADSL,也足够支持一些小型服务的提供。本篇文章将详细...
经环境Nginx+mysql5.7+php7.3+redis+jdk1.8+etcd、kafka、minio、ssdb数据库imweb、enterprise、databus环境nginx+mysql5.7+php7.3+redis+jdk1.8+etcd、kafka、minio、ssdb数据库imweb、enterprise、databus web 伪...
网站架设时,Apache Tomcat通常与HTTP服务器如Apache HTTP Server或Nginx配合使用。HTTP服务器负责处理静态资源请求,而动态内容(如由Servlets和JSP生成的内容)则通过反向代理传递给Tomcat处理。这种架构可以提高...
访问官方网站下载并安装最新版本。 2. **全局安装http-server**:打开终端或命令提示符,输入`npm install -g http-server`,这将全局安装http-server模块,使得可以在任何目录下启动服务器。 3. **创建Web项目...