设为首页 收藏本站
查看: 1104|回复: 0

[经验分享] nginx+lua+redis构建高并发应用

[复制链接]

尚未签到

发表于 2018-11-7 10:29:59 | 显示全部楼层 |阅读模式
  nginx+lua+redis构建高并发应用
  ngx_lua将lua嵌入到nginx,让nginx执行lua脚本,高并发,非阻塞的处理各种请求。
  url请求nginx服务器,然后lua查询redis,返回json数据。
  一.安装lua
  # apt-get install lua5.1
  # apt-get install liblua5.1-dev
  # apt-get install liblua5.1-socket2
  二.安装nginx
  # apt-get install git-core
  # git clone https://github.com/simpl/ngx_devel_kit.git
  # git clone https://github.com/chaoslawful/lua-nginx-module.git
  # git clone https://github.com/agentzh/redis2-nginx-module.git
  # git clone https://github.com/agentzh/set-misc-nginx-module.git
  # git clone https://github.com/agentzh/echo-nginx-module.git
  # git clone https://github.com/catap/ngx_http_upstream_keepalive.git
  # apt-get install libpcre3 libpcre3-dev libltdl-dev libssl-dev libjpeg62 libjpeg62-dev libpng12-0 libpng12-dev libxml2-dev libcurl4-openssl-dev libmcrypt-dev autoconf libxslt1-dev libgd2-noxpm-dev libgeoip-dev libperl-dev -y
  # wget http://nginx.org/download/nginx-1.0.8.tar.gz
  # tar zxvf nginx-1.0.8.tar.gz
  # cd nginx-1.0.8
  # ./configure –prefix=/usr/local/nginx –with-debug –with-http_addition_module \
  –with-http_dav_module –with-http_flv_module –with-http_geoip_module \
  –with-http_gzip_static_module –with-http_image_filter_module –with-http_perl_module \
  –with-http_random_index_module –with-http_realip_module –with-http_secure_link_module \
  –with-http_stub_status_module –with-http_ssl_module –with-http_sub_module \
  –with-http_xslt_module –with-ipv6 –with-sha1=/usr/include/openssl \
  –with-md5=/usr/include/openssl –with-mail –with-mail_ssl_module \
  –add-module=../ngx_devel_kit \
  –add-module=../echo-nginx-module \
  –add-module=../lua-nginx-module \
  –add-module=../redis2-nginx-module \
  –add-module=../ngx_http_upstream_keepalive \
  –add-module=../set-misc-nginx-module
  # make
  # make install
  三.安装lua-redis-parser
  # git clone https://github.com/agentzh/lua-redis-parser.git
  # export LUA_INCLUDE_DIR=/usr/include/lua5.1
  # make CC=gcc
  # make install CC=gcc
  四.安装json
  # wget http://files.luaforge.net/releases/json/json/0.9.50/json4lua-0.9.50.zip
  # unzip json4lua-0.9.50.zip
  # cp json4lua-0.9.50/json/json.lua /usr/share/lua/5.1/
  五.安装redis-lua
  # git clone https://github.com/nrk/redis-lua.git
  # cp redis-lua/src/redis.lua /usr/share/lua/5.1/
  六.配置
  user www-data;
  worker_processes 8;
  worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
  error_log logs/error.log notice;
  pid logs/nginx.pid;
  worker_rlimit_nofile 60000;
  events {
  worker_connections 1024;
  use epoll;
  }
  http {
  include mime.types;
  default_type application/octet-stream;
  access_log logs/access.log;
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 60;
  types_hash_max_size 2048;
  server_tokens off;
  lua_code_cache on;
  upstream redis_pool {
  server 192.168.1.39:6379;
  keepalive 1024 single; //定义连接池大小,当连接数达到此数后,后续的连接为短连接
  }
  server {
  listen 80;
  server_name 192.168.1.211;
  location /get_redis{
  #internal;
  set_unescape_uri $key $arg_key;
  redis2_query hgetall $key;
  redis2_pass redis_pool;
  }
  location /json {
  content_by_lua_file conf/fuck.lua;
  }
  }
  }
  # vim fuck.lua
  local json = require(“json”)
  local parser = require(“redis.parser”)
  local res = ngx.location.capture(“/get_redis”,{
  args = { key = ngx.var.arg_key }
  })
  if res.status == 200 then
  reply = parser.parse_reply(res.body)
  value = json.encode(reply)
  ngx.say(value)
  a = json.decode(value)
  ngx.say(a[2])
  end
  七.测试
  # redis-cli -h 192.168.1.39
  redis 192.168.1.39:6379> HMSET ttlsa www www.ttlsa.com mail mail.ttlsa.com
  OK
  # curl ‘http://192.168.1.211/json?key=ttlsa’
  ["www","www.ttlsa.com","mail","mail.ttlsa.com"]
  www.ttlsa.com


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-631859-1-1.html 上篇帖子: redis相关知识(四) 下篇帖子: Redis使用总结之与Memcached异同
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表