javashop-6.4版本中将访问量比较高的页面(商城首页、商品详情页面、帮助中心)生成静态页时生成到redis缓存中,当访问这些页面的时候将会直接在redis中读取这些页面,这样做大大减轻了服务器的负担。所以,为了配合此功能的实现,需要在nginx中引入redis、lua等模块。Javashop采用 Redis + NGINX + LUA 的分页式静态页存储方案,选用OpenResty为NGINX +LUA的部署套件。
1:目录规划
路径 | 说明 |
---|---|
/opt/ | 存放软件包 |
/usr/local/openresty | Openresty安装目录 |
2:OpenResty及Redis+lua连接池的安装
yum install -y git //安装git支持
cd /opt //进入软件存放包路径
git clone https://github.com/javashop/resty-redis-cluster.git //下载Openresty套件
chmod a+x resty-redis-cluster/install-openresty.sh //赋予权限
resty-redis-cluster/install-openresty.sh //进行Openresty套件的安装
注:OpenResty的默认安装目录为/usr/local/openresty/,安装完之后,nginx、lua等均已经安装成功。
3:配置静态页输出节点
vi /usr/local/openresty/nginx/lua/redis_connector.lua
修改相应的ip和端口号
local ok, err = red:connect("ip", 6379) //修改此处的ip和端口号为您的redis信息
if not ok then
ngx.say("failed to connect: ", err)
return
end
--如果有密码,请加入相应的验证,如果没有密码去掉验证即可
local res, err = red:auth("password") //此处为redis密码
if not res then
ngx.say("failed to authenticate: ", err)
return
end
4:配置nginx.config
vi /usr/local/openresty/nginx/conf/nginx.conf //nginx配置文件位置
- 修改lua支持
#在http节点中加入下面的配置
lua_shared_dict redis_cluster_slot_locks 100k;
- 配置静态页负载(以2个节点为例)
#在http节点中建立集群:
upstream pages {
server ip:83; //配置相关的端口号,这里以83/84为例,与下一步的server端口一致
server ip:84;
keepalive 60000;
}
- 修改nginx的转发
#此处配置pc域名,wap目前没有静态页面,此功能正在做,敬请期待。所以下方需单独配置wap
server {
listen 80;
server_name v64test.javamall.com.cn; //配置pc域名
location /{
set $isapi "";
#如果匹配到静态资源,则交由本机82端口处理,查看下面82端口可知:将静态资源进行
#了转发到任一目录。
if ( $uri ~* "\.(gif|jpg|jpeg|png|css|js|ico)$" ){
proxy_pass http://127.0.0.1:82;
set $isapi "no";
break;
}
#如果uri匹配到商家中心首页,则交由Tomcat进行处理,因为此页面不是静态页并以index.html结尾,所以需要单独配置
if ( $uri ~* "/store_themes/(\d+)/index.html" ){
proxy_pass http://10.44.184.80:8086 ; #如果转发到其他服务器请填写内网ip
break;
}
#这里代表使用lua响应内容。如果uri匹配到首页、商品详情页、帮助中心页面,则交由83端口处理,查看下面83端口即发现交由lua进行处理
if ( $uri ~* "/index.html|/goods-(\d+).html|/help-(\d+)-(\d+).html" ){
proxy_pass http://127.0.0.1:83;
set $isapi "no";
break;
}
#如果不是以上页面,则交由Tomcat进行处理
proxy_pass http://10.44.184.80:8086; #如果转发到其他服务器请填写内网ip:port
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
}
}
server {
listen 82;
server_name localhost;
location / {
#注意:需要将静态资源放至下面目录,为防止某些特殊的静态资源访问不到。
#将war包中的(adminthemes、cms、core、index、install、selector、statics、themes、ueditor)直接解压至此
#备注:javashop的静态资源目前在以上文件夹中
root /opt/statics;
}
}
#新建静态页输出节点(我们假设建立2个输出节点):
#节点1
server {
listen 83;
server_name localhost;
location / {
default_type text/html;
content_by_lua_file "/usr/local/openresty/nginx/lua/redis_connector.lua"; //lua脚本位置
}
}
#节点2
server {
listen 84;
server_name localhost;
location / {
default_type text/html;
content_by_lua_file "/usr/local/openresty/nginx/lua/redis_connector.lua"; //lua脚本位置
}
}
#此处配置wap的域名
server {
listen 80;
server_name m.v64test.javamall.com.cn;
location / {
proxy_pass http://10.44.184.80:8086;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header Cookie $http_cookie;
}
}
5:nginx优化(此步骤仅供参考,可根据实际情况进行优化)
#优化nginx
worker_processes 2;
events {
worker_connections 65535;
use epoll;
}
备注:worker_processes 调整为机器CPU核数
6:测试
启动nginx
/usr/local/openresty/nginx/sbin/nginx
如需重起:
/usr/local/openresty/nginx/sbin/nginx -s reload
测试节点:
curl http://localhost:83/index.html
至此lua+redis+nginx已经配置完成。