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/single_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已经配置完成。

results matching ""

    No results matching ""