0、基本负载均衡配置

编辑/etc/nginx/nginx.conf,加入负载平衡配置:

http {
upstream tomcat {
server localhost:8080;
server localhost:8081;
}
include /etc/nginx/mime.types;
default_type application/octet-stream;

更新/etc/nginx/conf.d/default.conf,配置反向代理:

location / {
proxy_pass http://tomcat;
}

重新启动Nginx:

sudo service nginx restart

1、子请求

当一个请求发起一个“子请求”的时候,依照 Nginx 的术语,习惯把前者称为后者的“父请求”(parent request)。

location /main {
echo_location /foo; # echo_location发送子请求到指定的location
echo_location /bar;
}
location /foo {
echo foo;
}
location /bar {
echo bar;
}

输出:

$ curl location/main
$ foo   03.  bar

这里,main location就是发送2个子请求,分别到foo和bar。这就类似一种函数调用。
“子请求”方式的通信是在同一个虚拟主机内部进行的。所以 Nginx 核心在实现“子请求”的时候,就仅仅调用了若干个 C 函数,全然不涉及不论什么网络或者 UNIX 套接字(socket)通信。我们由此能够看出“子请求”的运行效率是极高的。

2、ngx_lua简单例子

Hello Lua!

# nginx.conf
worker_processes 4; events {
worker_connections 1024;
}
http { server {
listen 80;
server_name localhost; location=/lua {
content_by_lua ‘
ngx.say("Hello, Lua!")
';
}
}
}

输出:
$ curl 'localhost/lua'
Hello,Lua。

3、配置session粘滞

需要配置Tomcat存储会话到Redis,我们需要使用 tomcat-redis-session-manager开源库包,具体需要一些调整,下载这个项目的源码项目,重新构建,本文使用版本为commons-pool2-2.2.jar 和 jedis-2.6.1.jar.复制这些Jar到tomcat的lib目录。将你的commons-pool, jedis 更新版本和tomcat版本在tomcat-redis-session-manager的build.gradle中配置一下,然后重新构建项目,将构建结果 tomcat-redis-session-manager-1.2.jar 复制到tomcat lib目录下,两个实例都要复制,修改每个tomcat的conf/content.xml文件,在tomcat的context.xml中配置:

<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" />
<Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager"
host="localhost"
port="6379"
database="0"
maxInactiveInterval="60" />

重新启动tomcat一切完成,你现在可以看到tomcat会话存储在redis中,使用先前tomcat内置案例,试验两个tomcat开机和关机不同情况进行测试,会话数据都不会受到影响。

4、nginx集群设置方向

如果有多台NGINX想实现负载均衡的话,

  1、每台nginx都有公网地址,在域名处设置同个域名多个指向,最简单实现轮洵。但故障切负会慢一点。
  2、一台公网nginx通过upstream功能,轮洵、ip、url多方式分发到内网多台nginx。但公网的nginx如果down机的话,内网全段。
  3、一对公网nginx加三个公网ip,通过keepalive实现高可用,再upstream到内网(就是我们刚刚上一节讲的主从备份)。

一般来说,上面1、2、3种方法基本可以解决,建议用2或3;

如果并发量真的巨大的话,一般就要借助硬件F5等设备做负载均衡,跟DNS、CDN等服务商合作做域名解析转发、缓存配置,这也是目前大多数大厂的架构配置。

5、失效转移设置

如果后端tomcat服务器处理超时,则nginx不请求下一个tomcat节点,而是直接返回。nginx默认,会重复尝试所有的节点以后,才会返回给浏览器错误。例如:在location设置参数(默认值也是如此): 
proxy_next_upstream http_502 http_504 error timeout invalid_header; 
其中有一个参数值 timeout,这个参数代表如果超时,则尝试其他节点。因此要去掉这个参数,修改后如下

proxy_read_timeout 1; 
proxy_next_upstream http_502 http_504 error invalid_header;

nginx功能扩展整理的更多相关文章

  1. Nginx功能介绍

    Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的. 从2004年发布至今,凭借开元的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也可作 ...

  2. PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析    PHPmysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理 介绍 PDO是一种PHP程序连接数据库的接口 ...

  3. PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理

    相关文章:PHP的mysql扩展整理,操作数据库的实现过程分析  PHP PDO扩展整理,包括环境配置\基本增删改查\事务\预处理 介绍 mysqli是PHP程序与mysql数据库进行数据交互的桥梁, ...

  4. PHP mysql扩展整理,操作数据库的实现过程分析

    相关文章:PHP mysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理   PHPmysqli扩展整理,包括面向过程和面向对象的比较\事务控制\批量执行\预处理 从某种程度上 ...

  5. Sed常用功能个人整理

    Sed常用功能个人整理 AsdilFibrizo关注 2019.06.24 10:23:41字数 240阅读 15 Sed对1G以下的数据效率很高这里介绍一些个人在工作中遇到的sed问题 1.查找字段 ...

  6. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  7. C++类功能扩展预留五招

    第一招虚函数 通过派生类来进行功能扩展是基本的面向对象的方式,这种方式大如下: class base { public: virtual ~base(){} virtual void fun() { ...

  8. spring源码深度解析-2功能扩展

    容器功能的扩展ApplicationContext用于扩展BeanFactory中现有的功能.究竟多出了哪些功能,进一步探索.写法上:BeanFactory bf = new XmlBeanFacto ...

  9. vs.net 2013 Saffolding功能扩展

    vs.net 2013 Saffolding功能扩展 Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个&l ...

随机推荐

  1. java-IO流-其他流

    ###22.01_IO流(序列流)(了解) * 1.什么是序列流     * 序列流可以把多个字节输入流整合成一个, 从序列流中读取数据时, 将从被整合的第一个流开始读, 读完一个之后继续读第二个, ...

  2. js中的call与apply随笔

    关于javascript中的call方法.总结网上的观点: 1: 继承. 2: 修改函数运行时的this指针. 可能说起来还是比较抽象,下面具体例子说一下: x.call(y) (1)y.m = x  ...

  3. Spring mvc session cookie实现自动登录

    设计过程 1. user表存储用户名密码等信息,login表存放用户登陆状态的表 user表中存储username,pwd,等信息 login表存username,series(UUID),token ...

  4. 前端AES解密

    使用插件Crypto.JS 安装 npm install --save_dev crypto-js // 导入 crypto-js 包 import CryptoJS from 'crypto-js/ ...

  5. 2018-2019-2 20165313 Exp2 后门原理与实践

    实践基础问题回答 (1)例举你能想到的一个后门进入到你系统中的可能方式? 应用程序设定后门,用户安装后,后门就可以进入.例如课堂上讲到的百度. (2)例举你知道的后门如何启动起来(win及linux) ...

  6. git忽视上传规则文件 .gitignore

    语法 语法 作用 例子 "/" 忽略根目录下的文件 /data "*" 忽略所有文件 *.txt => 1.txt,2.txt... "?&qu ...

  7. html5/h5课件如何制作?

    随着flash逐渐被html5取代,很多教育机构都在面临着如何将自己的flash交互课件产品转换到html5版本的问题,最近遇到非常多的客户一上来就问我,flash课件能直接转成Html5课件么?答案 ...

  8. C语言volatile关键字的用法

    volatile关键字的意义在于让被关键字修饰的变量每次使用时都重新去主内存里读取变量,而不是从高速缓存去读取. int a = 1; 普通变量定义之后,若要使用它,都会 先把它的值从主内存拷贝到高速 ...

  9. 使用iframe方式获得svg中的DOM元素,和svg 的 contentDocument 返回 null

    碰到这个的相关问题,百度找了好久,找到了个解决方法,原址 https://segmentfault.com/q/1010000009001758 var iframe = document.getEl ...

  10. 从零开始编译Poco C++和VS2015环境配置

    Poco C++是一个C++的开源框架,详细介绍可以问百度介绍更详细,这里我就记录下我从零编译poco-1.9.0和配置 VS2015的环境,以备不时之需. 步骤:一.安装cmake: 二.编译poc ...