文档章节

ngnix-operesty / 初识

Lykos-雪狼
 Lykos-雪狼
发布于 2018/06/29 23:54
字数 652
阅读 31
收藏 0

前言

官网 安装 组件


文摘

使用balancer_by_lua_block做应用层负载均衡

ngx_lua模块

安装

yum -y install yum-utils	
yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo	
yum -y install openresty	


常用命令

nginx -c ./nginx.conf	启动命令 
nginx -s restart	重启
nginx -s stop	关闭

组件

主要核心组件

Nginx 高性能web服务器

LuaJIT 高效的lua解释器/编译器

ngx_lua 以模块的方式让Luay语言嵌入在nginx里执行

其它组件

ngx_echo

调试工具

opm 类似Npm包管理工具

resty-cli 命令行工具

restydoc 参考手册

简单打印日志
ngx.log(ngx.ERR,"message")

nginx基本组成

worker_processes  1;  # 工作进程数量-一般按cpu核心数设定
error_log /error.log; # 错误日志
events {
    use   epoll; #工作模式  默认epoll 支持[select|poll|epoll]都是Linux多路复用IO模式
    worker_connections 1024; #每个工作进程支持的最大并发量 nginx实际支持并发[worker_processes*worker_connections]
}
http {

    #负载均衡&反向代理配置
    upstream common{
        ...
    }

    #虚拟主机配置
    server { 
        listen 8080;
        access_log /access.log;
        location / {
            ...
        }
    }
}

lua脚本使用

1.定义共享缓存

http{
	...
	lua_shared_dict ngx_cache 1m;
}
获取缓存ngx_cache信息,ngx_cache 缓存是所有nginx work process所共享的
local ngx_cache = ngx.shared.ngx_cache

2.自定义负载均衡

ngx.upstream/lua-upstream-nginx-module

ngx.balancer/lua-resty-core

upstream common{
    	...
    	balancer_by_lua_file /nginx/lua/balance.lua;
}

upstream common{
    	...
    	balancer_by_lua_block{
			local ups = require "ngx.upstream"
			local balancer = require "ngx.balancer"
			local peers = ups.get_primary_peers("common")
			for idx in ipairs(peers) 
			do
				local peer = peers[idx] -- 获取upstream common 中的 server
			end
			local ok, err = balancer.set_current_peer(ip, port) --设置后台应用服务器  
		}
}
 

3.健康检查

resty.upstream.healthcheck/lua-resty-upstream-healthcheck

init_worker_by_lua_*/ngx_http_lua_initworkerby

http{
	init_worker_by_lua_block {
        local hc = require "resty.upstream.healthcheck"
        local ok, err = hc.spawn_checker {
            shm = "healthcheck", # 添加共享内存lua_shared_dict healthcheck 1m;
            upstream = "common", # upstream common
            type = "http",
            http_req = "GET /health HTTP/1.0\r\nHost: common\r\n\r\n",
            interval = 2000,
            timeout = 5000,
            fall = 3,
            rise = 2,
            valid_statuses = {200, 302},
            concurrency = 1,
        }
 
        if not ok then
            ngx.log(ngx.ERR, "=======> failed to spawn health checker: ", err)
            return
        end
    }
}

通用函数

--获取客户端ip
function get_client_ip()
    local headers=ngx.req.get_headers()
    local ip=headers["X-REAL-IP"] or headers["X_FORWARDED_FOR"] or ngx.var.remote_addr or "0.0.0.0"
    return ip
end

常用配置

user                    nobody; 
worker_processes        4;
worker_rlimit_nofile    65535; 

events {
    use epoll;
    worker_connections  65535;
}

http {
    include             mime.types;
    default_type        application/octet-stream;

    log_format main   '{"cs_datetime ":"$time_iso8601",'
                        '"s_ip":"$server_addr",'
                        '"o_ip":"$http_x_forwarded_for",'
                        '"c_ip":"$remote_addr",'
                        '"cs_method":"$request_method",'
                        '"scheme":"$scheme",'
                        '"s_sitename":"nginx_$server_name",'
                        '"cs_referer":"$http_referer",'
                        '"cs_uri_stem":"$uri",'
                        '"cs_uri_query":"$args",'
                        '"sc_bytes":$body_bytes_sent,'
                        '"sc_status": $status,'
                        '"time_take":$request_time,'
                        '"upstreamtime":"$upstream_response_time",'
                        '"upstreamaddr":"$upstream_addr",'
                        '"cs_user_agent":"$http_user_agent",'
                        '"https":"$https"'
                        '}';
                      '"$http_x_forwarded_for" $status $body_bytes_sent $upstream_response_time $request_time $host';

    fastcgi_connect_timeout       300;
    fastcgi_send_timeout          300;
    fastcgi_read_timeout          300;
    fastcgi_buffer_size           64k;
    fastcgi_buffers             8 32k;
    fastcgi_busy_buffers_size     128k;
    fastcgi_temp_file_write_size  128k;

    sendfile            on;
    server_tokens       off;


    keepalive_timeout   65;
    gzip                on;
    gzip_min_length     1k;
    gzip_buffers      4 16k;
    gzip_http_version   1.0;
    gzip_comp_level     2;
    gzip_types          text/plain application/x-javascript text/css application/xml text/vnd.wap.wml;
    gzip_vary           on;
    open_file_cache     max=32768 inactive=20s;
    open_file_cache_min_uses      1;
    open_file_cache_valid         30s;

    proxy_ignore_client_abort     on;

    client_max_body_size        500M;
    client_body_buffer_size     256k;
    proxy_connect_timeout       30;
    proxy_send_timeout          30;
    proxy_read_timeout          300;
    proxy_buffer_size           256k;
    proxy_buffers             4 256k;
    proxy_busy_buffers_size     256k;
    proxy_temp_file_write_size  256k;
    proxy_http_version          1.1;
	proxy_next_upstream http_502 http_504 error timeout invalid_header;

    include /etc/nginx/conf.d/*.conf;
}

© 著作权归作者所有

上一篇: java-jvm相关命令
下一篇: Linux-yum
Lykos-雪狼
粉丝 1
博文 10
码字总数 7086
作品 0
嘉定
高级程序员
私信 提问
Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String

Firefox给出的错误 Ext.Error: Unable to parse the JSON returned by the server: You're trying to decode an invalid JSON String: articlelist.jsp {"results":"100","rows":[{"id":"1"......

anonymous_007
2014/05/28
2.4K
2
转Elasticsearch顶尖高手系列课程

Elasticsearch,是目前行业中非常热门的一个技术。Elasticsearch是一种分布式的海量数据搜索与分析的技术,可以用于电商网站、门户网站、企业IT系统等各种场景下的搜索引擎,也可以用于对海量...

小花卷juan
2017/06/24
126
0
初识微服务

现在越来越多的项目架构正在趋向于微服务架构,原来一个系统可能很庞大,很多功能都集中在同一个项目当中。特别是项目更新迭代或者增加新的需求的时候,对于服务器的更细有时会是一件很麻烦的...

割草的小猪头
2017/10/22
0
0
ngnix之虚拟主机

[root@localhost ngnix]# ./sbin/nginx -h nginx version: nginx/1.4.2 Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives] Options: -?,-h : this help -v : s......

泡海椒
2016/01/23
27
0
初识react(五) 数据流终极解决方案 dva(零配置)

回顾 初识react(一) 揭开jsx语法和虚拟DOM面纱 初识react(二) 实现一个简版的html+redux.js的demo 初识react(三)在 react中使用redux来实现简版计数器 初识react(四) react中异步解决方案之 ...

言sir
2018/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript权威指南笔记3-2

第三章、类型、值和变量 2、文本 I-1 字符串 是一组由16位值组成的不可变的有序序列。 每一个字符来自Unicode字符集 用来表示文本 长度是其所含16位值的个数。 和数组一样,索引从0开始。 JS...

_Somuns
23分钟前
5
0
Spring StateMahcine State 配置详解

状态机包含一系列各种关系的状态,最简单的关系,就是经过状态A事件E直接到状态B,当然还有选择关系,层级关系等等。该篇介绍Spring 状态机 状态的配置。我们知道可以通过方法configure(Sta...

microservice
24分钟前
5
0
基于 HTML5 Canvas 实现的文字动画特效

前言 文字是网页中最基本的元素,一般我们在网页上都是展示的静态文字,但是就效果来说,还是比较枯燥的。文字淡入淡出的动画效果在项目中非常实用,如果有某些关键的文字,可以通过这种动态...

htdaydayup
31分钟前
4
0
2019 年 Java 开发者生态报告!

数据来源自国外的一个调查,在过去的几周,这份调查一共采访了6707名开发人员。数据来源:https://www.baeldung.com/java-in-2019。 1.JDK 版本使用情况 即使在今天 Java 13 都已经发布了,J...

SnailClimb
31分钟前
4
0
支撑微博亿级社交平台,小白也能玩转Redis集群(原理篇)

Redis作为一款性能优异的内存数据库,支撑着微博亿级社交平台,也成为很多互联网公司的标配。这里将以Redis Cluster集群为核心,基于最新的Redis5版本,从原理再到实战,玩转Redis集群 常见R...

分布式系统架构
39分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部