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

    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; 

  • 相关阅读:
    Linux(centos)下安装JDK
    springmvc的面试知识点总结
    建造者模式
    PHP原型模式
    PHP适配器模式
    php备忘录模式
    PHP代理模式proxy
    单例模式
    工厂模式
    结构模式
  • 原文地址:https://www.cnblogs.com/chappell/p/10609433.html
Copyright © 2020-2023  润新知