OFBIZ分享:利用Nginx +Memcached架设高性能的服务
近年来利用Nginx和Memcached来提高站点的服务性能的作法,如一夜春风般的遍及大江南北,越来越多的门户站点和电子商务平台都採用它们来为自己的用户提供更好的服务体验。如:网易、淘宝、京东、凡客等无一不是如此。关于它们的优点,在此我不想再多言,假设您感兴趣,能够到网络上去搜索一下就可以轻松获得这方面的资料。我们今天的重点是和大家分享将Ofbiz与Nginx和Memcached配置在一起,在达到好的效果。
1) 所须要的软件
n Tengine:这是一个经过淘宝公司优化并开源的Nginxserver,它不仅保留了Nginx的全部长处,还增加了其他一些非常好的扩展。
n Memcached :请到官网上下载最新版本号。
n memc-nginx和srcache-nginx:这是淘宝公司的project师开发的,用于Nginx直接存取Memcached的两个扩展。请到网上下载它最新的版本号。在baidu中搜索memc-nginx和srcache-nginx就能够非常easy找到它们。
2) 软件安装
3) 原理
增加nginx和memcached后,当nginx收到用户的请求后,仅仅有动态的内容会被转发到ofbiz的tomcat进行处理,全部的静态内容都由nginx直接处理了,大大的减少了tomcatserver和后台数据库的压力。此外,由于memcached的存在,nginx会首先到memcached中提取数据,仅仅有数据不存在时才会到磁盘上读取文件或转给tomcat进行处理,并将取得的结果数据存入memcached中,这样,当下一次再请求同样的数据时,就直接从memcached中取了。不再受磁盘IO数的限制,大大的提高了效率。
由于直接由nginx对memcached进行存取,所以不须要对ofbiz的代码进行额外的改动,配置更加灵活。
4) 配置文件
以下我们来重点看一下nginx的配置文件。须要说明的是这个配置文件里,仅仅对经常使用的了部分组件进行了配置,假设没有包括您所须要的配置部分,你能够自己依照同样的思路去加入上就可以。
|
#user nobody; worker_processes 2; daemon on; #error_log logs/error.log; #error_log logs/error.log notice; error_log logs/error.log info; #error_log logs/error.log debug; #pid logs/nginx.pid; events { use epoll; worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local]"$request" ' '$status $body_bytes_sent"$http_referer" ' '"$http_user_agent""$http_x_forwarded_for"'; upstream memcache{ server 127.0.0.1:12357; keepalive 512; } # upstream ofbiz_tomcat{ server 127.0.0.1:8080; } #ofbiz server server { listen 80; server_name _*; #charset koi8-r; access_log logs/ecshop.ofbiz.cn.log main; #处理memcached location /memc { internal;#仅仅同意本地訪问,提高了数据安全 memc_connect_timeout100ms; memc_send_timeout100ms; memc_read_timeout100ms; set$memc_key $query_string; memc_passmemcache; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,将动态的请求转请给tomcat location~* /(control|products)/ { set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://ofbiz_tomcat; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,将动态的请求转请给tomcat location ~* \.(jsp|jspx)$ { set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://ofbiz_tomcat; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location/ { set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; root <OFBIZ_HOME>/baseapps/ecommerce/webapp/ecshop; index index.html index.htm index.jsp default.jsp; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location /ordermgr/{ set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; root <OFBIZ_HOME>/baseapps/order/webapp; index index.html index.htm ; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location /partymgr/{ set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; root <OFBIZ_HOME>/baseapps/party/webapp; index index.html index.htm ; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location /catalog/ { root <OFBIZ_HOME>/baseapps/product/webapp; index index.html index.htm ; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location /images/ { set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; root <OFBIZ_HOME>/core/images/webapp; index index.html index.htm ; } #依据uri和參数,在memcached中查找,假设找到就返回给client,找不到就,到磁盘读取文件给client,并存处memcached location^~ /backend2013/ { set $key$uri$args; srcache_fetchGET /memc $key; srcache_storePUT /memc $key; root <OFBIZ_HOME>/themes/backend2013/webapp; index index.html index.htm ; } #redirect server error pages to the static page /50x.html # error_page 404 500 502 503504 /50x.html; location = /50x.html { root <OFBIZ_HOME>/core/images/webapp/errorpage; } #禁止nginx下载ftl,xml,groovy,sh等文件,由于这些文件在ofbiz中可能是我们的程序的组成部分 location ~* \.(ftl|xml|groovy|sh)$ { deny all; } #location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ #{ # expires 30d; #} #location~* \.(js|css)$ #{ # expires 1h; #} }#end server } |
限制说明:
以上的配置,仅仅是一个初始的配置,还须要再进一步优化,比方,须要差别对待GET和POST方法的处理,不然可能会有数据无法正确更新问题,可是由于时间有限,不再细讲,欢迎大家一起讨论共同进步。
OFBIZ分享:利用Nginx +Memcached架设高性能的服务的更多相关文章
- Nginx+Tomcat+Session 高性能群集搭建
随着IT行业的发展,linux服务器在企业中应用广泛,人们对linux上的应用服务要求也越来越高,早先的apache服务器.apache有优点也 有不足,apache渐渐不能满足人们的要求,目前ngi ...
- 配置集群Nginx+Memcached+Tomcat集群配置
上班之余抽点时间出来写写博文,希望对新接触的朋友有帮助.今天在这里和大家一起学习一下配置集群 1. Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebS ...
- 利用nginx实现负载均衡和动静分离
1.Nginx介绍 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 . Nginx 是由 ...
- 利用Nginx+Mono+Fastcgi代替IIS对Asp.Net进行反向代理
Nginx的好处相信我不必多说了,它作为一个相当轻量级的开源Web 服务器以及反向代理服务器而深受欢迎.越来越多的公司已经对它产生兴趣,包括我们公司的许多部门,利用它进行负载均衡和资源管理,之前写过一 ...
- 【转】Nginx+Tomcat搭建高性能负载均衡集群
最近对负载均衡比较感兴趣,研究了公司的负载均衡的配置,用的是阿里的SLB,相当于不用运维,只需要在后台进行简单的配置就能完成Tomcat的负载均衡,索性在网上找了几篇文章去尝试搭建一个集群,然而很多都 ...
- Nginx+Tomcat搭建高性能负载均衡集群
一. 工具 nginx-1.8.0 apache-tomcat-6.0.33 二. 目标 实现高性能负载均衡的Tomcat集群: 三. 步骤 1.首先下载Nginx ...
- Nginx+Tomcat搭建高性能负载均衡集群(转)
转载自:http://blog.csdn.net/wang379275614/article/details/47778201 一. 工具 nginx-1.8.0 apache-tomca ...
- Nginx+Memcached+Tomcat集群配置
1. Nginx Nginx是通过将多个Web Server绑定到同一个IP地址下,以实现多个WebServer间的负载均衡,降低单个Web Server的负荷,以提高整体的性能与稳定性. 安装和 ...
- 利用 NGINX 最大化 Python 性能,第二部分:负载均衡和监控
[编者按]本文主要介绍 NGINX 的主要功能以及如何通过 Nginx 优化 Python 应用性能.本文系国内 ITOM 管理平台 OneAPM 编译呈现. 本文上一篇系: 利用 NGINX 最大化 ...
随机推荐
- java volatile关键字的理解
转载:http://shmilyaw-hotmail-com.iteye.com/blog/1672779 一个多线程的示例引发的问题 在讨论这个关键字之前先看一个多线程的示例代码: public c ...
- CentOS6.5安装Python2.7和Pip
注:文中所写的安装过程均在CentOS6.5 x86下通过测试,安装的Python版本为2.7.12,Pip版本为8.1.2 主要参考博文:http://bicofino.io/2014/01/16/ ...
- 关于Mysql索引的笔记
MySQL索引原理 索引目的 索引的目的在于提高查询效率,可以类比字典,如果要查“mysql”这个单词,我们肯定需要定位到m字母,然后从下往下找到y字母,再找到剩下的sql.如果没有索引,那么你可能需 ...
- ThinkPHP - 连贯操作
/** * 连贯操作 * @return 无返回值 */ public function coherentOperation(){ //实例化模型 $user = M('User'); // +--- ...
- 友盟iOS微信登陆没有回调的原因
1.在友盟文档中这样说: 链接 7.4 微信登录 添加配置文件参考文档:添加微信及朋友圈,添加相关库文件,配置URL schemes及添加系统回调 注意微信登录必须先在微信开放平台申请微信登录权限 在 ...
- iOS原生App与H5页面交互笔记
文/MikeZhangpy(简书作者)原文链接:http://www.jianshu.com/p/4ed3e5ed99c6著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”. 最近在做一个项 ...
- linux嵌入式: 实现自己的tree命令
//# cat treecmd.c #include<stdio.h> #include<dirent.h> #include<sys/stat.h> #inclu ...
- mysql版sql助记
新建用户 CREATE USER 'username'@'host' IDENTIFIED BY 'password'; [host 中 使用 % 为通配符, 匹配任意远程主机] 赋权 GRANT p ...
- currentStyle和getComputedStyle的兼容写法
今天学习javascript的时候,教程中介绍了一种简单实现jQuery 中css()方法的写法 <!DOCTYPE html> <html lang="en"& ...
- Java字节码中的方法调用
invokestatic,用于static修饰的方法.任何时候调用的时候只需要类名+方法名即可,无需new.JVM直接将其映射到方法区,执行速度极快.当该方法需要参数的时候,invokestatic会 ...