javashop-6.4版本中将访问量比较高的页面(商城首页、商品详情页面、帮助中心)生成静态页时生成到redis缓存中,当访问这些页面的时候将会直接在redis中读取这些页面,这样做大大减轻了服务器的负担。所以,为了配合此功能的实现,需要在nginx中引入redis、lua等模块。
1 搭建nginx+lua+redis
使用服务器C:192.168.1.196进行搭建
javashop提供相关的压缩包,请使用下面链接自行下载。(链接: https://pan.baidu.com/s/1jHPVWEE 密码: q3cz)
* 安装nginx,安装至目录/usr/local/nginx。
* 将所有压缩文件放置 /home/root 目录

跳转到压缩包目录:
cd /home/root解压pcre:
gzip pcre-8.32.tar
tar -xvf pcre-8.32.tar.gz
- 解压 openresty:
tar -zxvf openresty-1.11.2.4.tar.gz
- 安装openresty
cd openresty-1.11.2.4
./configure --with-pcre=/home/root/pcre-8.32/
gmake && gmake install
安装LuaJIT
cd /home/root tar zxvf LuaJIT-2.0.4.tar.gz cd LuaJIT-2.0.4 make && sudo make install编译/安装 nginx
cd /home/root
tar -zxvf redis2-nginx-module-0.14.tar.gz
tar -zxvf nginx-1.11.2.tar.gz
tar -zxvf v0.28.tar.gz
tar -zxvf v0.3.0rc1.tar.gz
tar -zxvf v0.10.2.tar.gz
tar -zxvf ngx\\_http\\_redis-0.3.8.tar.gz
cd nginx-1.11.2
./configure --prefix=/usr/local/nginx --add-dynamic-module=/home/root/redis2-nginx-module-0.14 --add-module=/home/root/ngx\_devel\_kit-0.3.0rc1 --add-module=/home/root/set-misc-nginx-module-0.28 --add-module=/home/root/lua-nginx-module-0.10.2 --add-module=/home/root/ngx\_http\_redis-0.3.8
make && make install
- 备份nginx.conf,使用我写好的nginx.conf
cd /home/root/
cp nginx.conf /usr/local/nginx/conf/
- 倒入lua脚本
cd /home/root/lua
mkdir /usr/local/nginx/lua
mv rediscluster.lua /usr/local/nginx/lua/
- 搭建完成之后正确的nginx安装目录下的目录如图:

- 修改nginx配置文件,使之匹配自己的服务(nginx/lua)
vi /usr/local/nginx/conf/nginx.conf
主要替换内容:
a.这里代表每一个redis集群的节点需自行修改(修改成自己的redis信息,数量不限制,这里实例配置3个redis)
upstream redis-a{
server 192.168.1.190:6379;
}
注意:

b.修改nginx的转发
server {
listen 80;
server\_name localhost; \#配置域名的位置
\#charset koi8-r;
\#access\_log logs/host.access.log main;
location /redis { \#redis固有模块,请勿修改
internal;
set\_unescape\_uri $query $arg\_query;
redis2\_query get $query;
redis2\_pass $arg\_backend;
}
这里代表使用lua响应内容。javashop是将商品页面(goods-.html)、帮助中心(help--*.html)、 首页(index.html)生 成静态页到redis缓存中,所以当url中访问这些页面的时候,将会通过nginx+lua+redis读取缓存中的静态页。
location ~* goods-(\d+).html|index.html|help-(\d+)-(\d+).html {
default_type text/html;
content_by_lua_file "/usr/local/nginx/lua/rediscluster.lua";#此为lua脚本
}
#这里表示将请求中的静态信息转发到指定目录。注意:要将项目中的selector/statics/themes/ueditor,文件夹放到任一目录,这里放到了/home/javamall/
location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
root /home/javamall/;
}
#如果不是静态页的话,交由tomcat进行转发处理。
location /{
proxy_pass http://47.93.97.90:8089;
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;
}
}
- 编辑lua脚本
vi /usr/local/nginx/lua/rediscluster.lua
--注意修改黄色部分,这里与上方的nginx配置文件一一对应。上方有
upstream 名称 ,的server值为ip:端口,那么这里的值需要按照redis_servers[“ip:端口”]=”名称” 填写,修改一下内容
redis_servers = {}
redis_servers["123.56.50.239:6379"]="redis-a"
redis_servers["192.168.1.198:6391"]="redis-b"
redis_servers["192.168.1.198:6396"]="redis-c"
--修改服务数组'redis-a', 'redis-b','redis-c',都是之前nginx配置中的upstream
local servers = {'redis-a', 'redis-b','redis-c'}
- 启动nginx
/usr/local/nginx/sbin/nginx
注意:如果报错:
./sbin/nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
执行:
ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
至此lua+redis+nginx已经配置完成。