nginx功能扩展整理

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开机和关机不同情况进行测试,会话数据都不会受到影响。

猜你喜欢

转载自www.cnblogs.com/chappell/p/10609433.html