概述
部署的双层nginx架构需要自定义一些特殊的业务逻辑:
- 流量分发需要用 lua 去写分发的逻辑,在分发层 nginx 里去写的;
- 多级缓存架构存取的控制逻辑也需要用lua,在应用层 nginx 里去写的;
- 还有做热点数据的自动降级机制,也是用 lua 脚本去写降级机制的,在分发层 nginx 里去写的;
因为我们要用 nginx+lua 去开发,所以会选择用最流行的开源方案OpenResty:
nginx+lua 打包在一起,而且提供了包括 redis 客户端,mysql 客户端,http 客户端在内的大量的组件。
安装步骤
1.上传安装包
将下面的安装包上传到服务器上
nginx_upstream_check_module-0.3.0.tar.gz
ngx_cache_purge-2.3.tar.gz
ngx_openresty-1.7.7.2.tar.gz
2.部署openresty
//安装编译黄金
yum install -y readline-devel pcre-devel openssl-devel gcc
//上传的安装包放到这个目录下
mkdir -p /usr/servers
cd /usr/servers/
tar -xzvf ngx_openresty-1.7.7.2.tar.gz
cd /usr/servers/ngx_openresty-1.7.7.2/
cd bundle/LuaJIT-2.1-20150120/
make clean && make && make install
ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit
[root@dlsc-201-33 bundle]# cd ..
//将其他两个安装包放到这里
[root@dlsc-201-33 ngx_openresty-1.7.7.2]# mv *.tar.gz ngx_openresty-1.7.7.2/bundle/
//将其他两个安装包解压
tar -xvf ngx_cache_purge-2.3.tar.gz
tar -xvf nginx_upstream_check_module-0.3.0.tar.gz
[root@dlsc-201-33 ngx_openresty-1.7.7.2]# ./configure --prefix=/usr/servers --with-http_realip_module --with-pcre --with-luajit --add-module=./bundle/ngx_cache_purge-2.3/ --add-module=./bundle/nginx_upstream_check_module-0.3.0/ -j2
[root@dlsc-201-33 ngx_openresty-1.7.7.2]# make && make install
[root@dlsc-201-33 ngx_openresty-1.7.7.2]# cd ..
[root@dlsc-201-33 servers]# ll
总用量 0
drwxr-xr-x 2 root root 19 9月 12 18:16 bin
drwxr-xr-x 6 root root 56 9月 12 18:16 luajit
drwxr-xr-x 5 root root 59 9月 12 18:16 lualib
drwxr-xr-x 6 root root 54 9月 12 18:16 nginx
drwxrwxr-x 4 admin admin 89 9月 12 17:58 ngx_openresty-1.7.7.2
//查看nginx版本
[root@dlsc-201-33 servers]# /usr/servers/nginx/sbin/nginx -V
nginx version: openresty/1.7.7.2
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
TLS SNI support enabled
configure arguments: --prefix=/usr/servers/nginx --with-cc-opt='-I/usr/servers/ngx_openresty-1.7.7.2/build/luajit-root/usr/servers/luajit/include/luajit-2.1 -O2' --add-module=../ngx_devel_kit-0.2.19 --add-module=../echo-nginx-module-0.57 --add-module=../xss-nginx-module-0.04 --add-module=../ngx_coolkit-0.2rc2 --add-module=../set-misc-nginx-module-0.28 --add-module=../form-input-nginx-module-0.10 --add-module=../encrypted-session-nginx-module-0.03 --add-module=../srcache-nginx-module-0.28 --add-module=../ngx_lua-0.9.14 --add-module=../ngx_lua_upstream-0.02 --add-module=../headers-more-nginx-module-0.25 --add-module=../array-var-nginx-module-0.03 --add-module=../memc-nginx-module-0.15 --add-module=../redis2-nginx-module-0.11 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.13 --add-module=../rds-csv-nginx-module-0.05 --with-ld-opt='-Wl,-rpath,/usr/servers/luajit/lib -L/usr/servers/ngx_openresty-1.7.7.2/build/luajit-root/usr/servers/luajit/lib' --with-http_realip_module --with-pcre --add-module=/usr/servers/ngx_openresty-1.7.7.2/bundle/ngx_cache_purge-2.3 --add-module=/usr/servers/ngx_openresty-1.7.7.2/bundle/nginx_upstream_check_module-0.3.0 --with-http_ssl_module
//启动nginx
[root@dlsc-201-33 servers]# /usr/servers/nginx/sbin/nginx
3.配置
打开nginx配置文件,在http部分添加lua包,并把下面的lua.conf配置也加进来:
vi /usr/servers/nginx/conf/nginx.conf
lua_package_path "/usr/servers/lualib/?.lua;;";
lua_package_cpath "/usr/servers/lualib/?.so;;";
include lua.conf;
在/usr/servers/nginx/conf下,创建一个lua.conf
vi /usr/servers/nginx/conf/lua.conf
server {
listen 80;
server_name _;
location /lua {
default_type 'text/html';
content_by_lua 'ngx.say("hello world")'; //访问lua路径,返回hello world
}
}
4.测试
验证配置是否正确:
[root@dlsc-201-33 servers]# nginx/sbin/nginx -s reload //重新加载配置
[root@dlsc-201-33 servers]# /usr/servers/nginx/sbin/nginx -t
nginx: the configuration file /usr/servers/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/servers/nginx/conf/nginx.conf test is successful
访问测试结果:
[root@dlsc-201-33 nginx]# curl http://192.168.201.33/lua
hello world
在conf下面创建目录并修改配置文件:
[root@dlsc-201-33 conf]# mkdir lua
vi lua/test.lua
ngx.say("hello world, test");
location /lua {
default_type 'text/html';
content_by_lua_file conf/lua/test.lua;
}
[root@dlsc-201-33 nginx]# sbin/nginx -s reload
[root@dlsc-201-33 nginx]# curl http://192.168.201.33/lua
hello world, test
//查看日志
tail -f /usr/servers/nginx/logs/error.log
5. 工程化的nginx+lua项目结构
项目工程结构:
hello
hello.conf
lua
hello.lua
lualib
*.lua
*.so
创建hello.conf文件:
[root@dlsc-201-33 hello]# vi hello.conf
server {
listen 80;
server_name _;
location /hello{
default_type 'text/html';
content_by_lua_file /usr/hello/lua/hello.lua;
}
}
创建lua目录和hello.lua文件:
[root@dlsc-201-33 hello]# mkdir lua
[root@dlsc-201-33 hello]# vi lua/hello.lua
ngx.say("hello lua");
修改nginx配置文件(将http下面的配置改成):
[root@dlsc-201-33 hello]# vi /usr/servers/nginx/conf/nginx.conf
http {
lua_package_path "/usr/hello/lualib/?.lua;;";
lua_package_cpath "/usr/hello/lualib/?.so;;";
include /usr/hello/hello.conf;
......
}
拷贝lualib:
[root@dlsc-201-33 servers]# cp lualib/ ../hello/ -r
测试:
[root@dlsc-201-33 nginx]# sbin/nginx -s reload
[root@dlsc-201-33 nginx]# sbin/nginx -t
nginx: the configuration file /usr/servers/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/servers/nginx/conf/nginx.conf test is successful
[root@dlsc-201-33 nginx]# curl http://192.168.201.33/hello
hello lua
网友评论