• 52_基于OpenResty部署应用层nginx以及nginx+lua开发hello world


    我们这里玩儿nginx,全都会在nginx里去写lua脚本,因为我们需要自定义一些特殊的业务逻辑

    比如说,流量分发,自己用lua去写分发的逻辑,在分发层nginx里去写的

    再比如说,要用lua去写多级缓存架构存取的控制逻辑,在应用层nginx里去写的

    后面还要做热点数据的自动降级机制,也是用lua脚本去写降级机制的,在分发层nginx里去写的

    因为我们要用nginx+lua去开发,所以会选择用最流行的开源方案,就是用OpenResty

    nginx+lua打包在一起,而且提供了包括redis客户端,mysql客户端,http客户端在内的大量的组件

    我们这一讲是去部署应用层nginx,会采用OpenResty的方式去部署nginx,而且会带着大家写一个nginx+lua开发的一个hello world

    1、部署第一个nginx,作为应用层nginx(192.168.31.187那个机器上)

    (1)部署openresty

    mkdir -p /usr/servers
    cd /usr/servers/

    yum install -y readline-devel pcre-devel openssl-devel gcc

    wget http://openresty.org/download/ngx_openresty-1.7.7.2.tar.gz
    tar -xzvf ngx_openresty-1.7.7.2.tar.gz
    cd /usr/servers/ngx_openresty-1.7.7.2/

    cd /usr/servers/ngx_openresty-1.7.7.2/bundle/LuaJIT-2.1-20150120/
    make clean && make && make install
    ln -sf luajit-2.1.0-alpha /usr/local/bin/luajit

    cd /usr/servers/ngx_openresty-1.7.7.2/bundle
    wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
    tar -xvf 2.3.tar.gz

    cd /usr/servers/ngx_openresty-1.7.7.2/bundle
    wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/v0.3.0.tar.gz
    tar -xvf v0.3.0.tar.gz

    cd /usr/servers/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
    make && make install

    cd /usr/servers/
    ll

    /usr/servers/luajit
    /usr/servers/lualib
    /usr/servers/nginx
    /usr/servers/nginx/sbin/nginx -V

    启动nginx: /usr/servers/nginx/sbin/nginx

    (2)nginx+lua开发的hello world

    vi /usr/servers/nginx/conf/nginx.conf

    在http部分添加:

    lua_package_path "/usr/servers/lualib/?.lua;;";
    lua_package_cpath "/usr/servers/lualib/?.so;;";

    /usr/servers/nginx/conf下,创建一个lua.conf

    server {
    listen 80;
    server_name _;
    location /lua {
    default_type 'text/html';
    content_by_lua 'ngx.say("hello world")';
    }
    }

    在nginx.conf的http部分添加:

    include lua.conf;

    验证配置是否正确:
    /usr/servers/nginx/sbin/nginx -t


    重新nginx加载配置

    /usr/servers/nginx/sbin/nginx -s reload

    访问http: http://192.168.31.187/lua

    vi /usr/servers/nginx/conf/lua/test.lua

    ngx.say("hello world");

    修改lua.conf

    location /lua {
    default_type 'text/html';
    content_by_lua_file conf/lua/test.lua;
    }

    查看异常日志

    tail -f /usr/servers/nginx/logs/error.log

    (3)工程化的nginx+lua项目结构

    项目工程结构

    hello
    hello.conf
    lua
    hello.lua
    lualib
    *.lua
    *.so

    放在/usr/hello目录下

    /usr/servers/nginx/conf/nginx.conf

    worker_processes 2;

    error_log logs/error.log;

    events {
    worker_connections 1024;
    }

    http {
    include mime.types;
    default_type text/html;

    lua_package_path "/usr/hello/lualib/?.lua;;";
    lua_package_cpath "/usr/hello/lualib/?.so;;";
    include /usr/hello/hello.conf;
    }

    /usr/hello/hello.conf

    server {
    listen 80;
    server_name _;

    location /lua {
    default_type 'text/html';
    lua_code_cache off;
    content_by_lua_file /usr/hello/lua/hello.lua;
    }
    }

    2、如法炮制,在另外一个机器上,也用OpenResty部署一个nginx

  • 相关阅读:
    第26月第26天 Domain=AVFoundationErrorDomain Code=-11850
    第26月第25天 ubuntu openjdk-8-jdk jretty
    第26月第23天 nsobject 单例 CFAbsoluteTimeGetCurrent
    第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
    第26月第20天 springboot
    第26月第18天 mybatis_spring_mvc pom
    python中的字符数字之间的转换函数
    python if else elif statement
    python 赋值魔法
    python print import使用
  • 原文地址:https://www.cnblogs.com/hg-super-man/p/12782497.html
Copyright © 2020-2023  润新知