nginx配置文件详解和负载均衡

Nginx 配置

配置nginx.conf ,

/usr/local/webserver/nginx/conf/nginx.conf

nginx 启动命令说明

[root@iz2ze2w3v37sit3vf71kuez sbin]# ./nginx -?
nginx version: nginx/1.6.2
Usage: nginx [-?hvVtq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
  -?,-h         : this help
  -v            : show version and exit
  -V            : show version and configure options then exit
  -t            : test configuration and exit
  -q            : suppress non-error messages during configuration testing
  -s signal     : send signal to a master process: stop, quit, reopen, reload
  -p prefix     : set prefix path (default: /usr/local/webserver/nginx/)
  -c filename   : set configuration file (default: conf/nginx.conf)
  -g directives : set global directives out of configuration file

-s

reload

[root@iz2ze2w3v37sit3vf71kuez sbin]# ./nginx -s reload

用户无感知重启,比如修改了nginx配置文件,然后执行reload重启,则在重启成功之前,nginx依然在按照老的配置在工作,重启成功后,按照新的配置工作

stop

立即停止

quit

处理完当前请求后,停止

nginx 为多进程模式

worker_processes  1;    #工作进程:数量,根据硬件调整,通常等于CPU数量

错误日志位置及级别
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

nginx启动后,会生成一个pid文件,记录 nginx主进程的 ID 号。
#pid        logs/nginx.pid;

worker_rlimit_nofile 65525;

# 指定进程可以打开最大的描述符:数目

events {

use epoll; #支持大并发的原因,使用Linux异步I/O模式。(默认使用同步,我们需要手动修改成异步)这里必须使用异步I/O

}

worker_connections

events {
    worker_connections  1024;
    use epoll;
}

worker_connections:每个工作进程最大的连接数量,根据硬件调整,和前边的工作进程配合起来用。当来大量并发,处理不过来时就会产生排队,允许排队的最大数量。多余这个值的请求就会报502了,这里建议多配置一些,默认是1024.

keepalive_timeout 60; #超时时间

client_header_buffer_size 4k; #客户端请求头部的缓冲区大小。这个可以根据你系统设置分页大小来设置,建议设置成4k或4k的倍数。

open_file_cache max=65535 inactive=60s;

# 这个将为打开文件指定缓存,默认是关闭的。max指定缓存数量,

把header缓存起来,就会走nginx的缓存,静态文件、图片等等,不经过tomcat和后端服务,直接返回资源, (tomcat处理静态资源效率不高,适合处理动态请求)。

inactive=60s 如果60s,没有再次被用到,属于非热点数据,会被缓存里清掉,这几个是配合使用的。

open_file_cache min uses 3;

# open_file_cache 指令中的inactice参数时间内文件的最少使用次数,如果超过这个,属于热点数据。非热点数据会在缓存里清理掉。

这里要配合使用,如

open_file_cache max=65535 inactive=60s; open_file_cache min uses 3;

60s内,被使用3次的属于热点数据,非热点数据会在缓存里清理掉。

open_file_cache_valid 60s;

这个指多长时间检查一下缓存有效的信息,如,这里设置60s,则60s检查一下缓存内数据是否失效,失效的被清理掉。

负载均衡配置

Nginx负载均衡的详细配置及使用案例详解. - 一枝花算不算浪漫 - 博客园

nginx配置负载均衡 - LaveCoral - 博客园

Nginx服务器之负载均衡策略(6种) - 左羽 - 博客园

nginx的负载均衡主要是对proxy_pass和upstream的配置。

nginx本身就是一个web容器,既可以作为一个web容器,也可以作为负载均衡使用。负载均衡,需要配置upstream;web容器需要配置server。

负载均衡,upstream不是一个,可以有好多个。如:

upstream foo1 和upstream foo2

负载均衡整个流程:

1)首先配置 upstream upstream_name {}  要映射的服务器。其中的upstream_name大家可以指定为服务的域名或者项目的代号,这个名字是自己取的。

2)在http server下,来执行刚刚配置服务upstream_name的转发。

1)配置upstream (http模块内server模块外添加代码)

upstream bakend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

2)在http server模块location 下配置proxy_pass

如下,是配置完整的

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

    sendfile        on;

    keepalive_timeout  65;
    
    upstream bakend {
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}



    server {
        listen       80;
        server_name  localhost;

        location /status {
            root   html;
            index  index.html index.htm;
            stub_status on;
            access_log on;
        }


        location / {
        proxy_pass http://bakend;

        }

重启nginx就生效了。

nginx负载均衡策略

nginx的负载均衡策略有6种:

轮询

默认方式

weight

权重方式

ip_hash

依据ip分配方式

least_conn

最少连接方式

fair(第三方)

响应时间方式

url_hash(第三方)

依据URL分配方式

一、轮询(默认)

最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器。

参数有:

参数

描述

fail_timeout

与max_fails结合使用

max_fails

设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了

fail_time

服务器会被认为停机的时间长度,默认为10s。

backup

标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。

down

标记服务器永久停机了。

注意:

  • 在轮询中,如果服务器down掉了,会自动剔除该服务器。
  • 缺省配置就是轮询策略。
  • 此策略适合服务器配置相当,无状态且短平快的服务使用。

弊端:

轮询策略弊端,不能解决session共享问题。如我访问一个网站,同时会发出多个不同请求,打到不同的服务器上,再把结果返回给客户端。

不同的请求,seeesion不同。

Session共享问题解决方案:

由于请求先通过Nginx代理服务器,再有nginx服务器分配请求到具体的应用服务器中间就会遇到Session共享问题:

1.ip_hash 根据ip分配请求的应用服务器

2.不使用session,换cookie就不会存在此问题,但是网站安全度降低

3.使用cookie和redis缓存(建议此方案,方便扩展,缓存中速度高效)

例如:生成一个uuid作为用户信息的key存放在redis缓存中,再将uuid作为cookie的值写会客户端,cookie的key可以用固定值(常量)

4.放到MySQL数据库中,不推荐(增加数据库的io)

5.自己修改编写nginx的程序

参考链接:

Nginx负载均衡的SESSION共享问题解决方案_锦衣夜行_-CSDN博客_nginx负载均衡session处理

二、权重

在轮询策略的基础上制定轮询的几率。例如

upstream foo {
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

这里例子中,weight参数用于制定轮询的几率,weight默认值为1;weight的数值和被访问的几率成正比。

注意:

  • 权重越高分配到需要处理的请求越多。
  • 此策略可以与least_conn和ip_hash结合使用。
  • 此策略比较适合服务器的硬件配置差别比较大的情况。

三、ip_hash

负载均衡器按照客户端IP地址的分配方式,可以确保相同客户端的请求一直发送到相同的服务器。这样每个访客都固定访问一个后端服务器。

(每个请求按访问ip的hash结果进行分配,这样每个访客固定访问一个后端服务器,可以解决session问题)

upstream foo {
    ip_hash;
    server localhost:8001 
    server localhost:8002;
    server localhost:8003;
    server localhost:8004;
}

注意:

  • 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
  • ip_hash不能与backup同时使用。
  • 此策略适合有状态服务,比如session。
  • 当有服务器需要剔除,必须手动down掉。

四、least_conn 最小连接

把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。

upstream foo {
    least_conn;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

注意:

  • 此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。

除了上面这些调度策略之后,还有一些第三方的调度策略可以集成到nginx中。

在实际运用中,需要根据不同的场景选择不同的策略,大多是多种策略结合使用以达到实际需求的性能

五、fair(第三方)

按后端服务的响应时间来分配请求,响应时间短的优先分配。

upstream foo {
    fair;
    server localhost:8001 ;
    server localhost:8002;
    server localhost:8003 ;
    server localhost:8004 ;
}

fair模块需要单独安装

六、url_hash(第三方)

按访问的url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例,在upstream 中加入hash语句,server语句中不能写入height等其他参数,hash_method是使用的hash算法。

upstream foo {
 
    server server1:8001 ;
    server server2:8001 ;
    hash $request_rul;
    hash_method crc32;

}

其他的配套参数:

upstream foo { #定义负载均衡设备的ip及设备状态}{
    server localhost:8002 down;
    server localhost:8001 weight=2;
    server localhost:8002;
    server localhost:8003 backup;
    server localhost:8004 max_fails=3 fail_timeout=20s;
}

--down 表示暂不启用,这个ip现在不参与请求的转发,相当于注释掉了。把down删除掉,就可以重新参与请求转发了。

--backup 备用机器,平时不用,压力不大,不参与负载均衡转发,当压力足够大时,自动参与到负载均衡的转发

--max_fails:允许请求失败的默认次数为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误。

--fail_timeout:max_fails 失败次后,暂停的时间。

--max_fails=3 fail_timeout=20s 这个ip,如果转发失败3次,则暂停该服务的转发,20s之后,继续使用该转发服务

学习到--1:21:05(第八天)

负载均衡的种类

1)一种是通过硬件来进行解决,常见的硬件有NetScaler、F5、Radware和Array等商用的负载均衡器,但是它们是比较昂贵的

2)一种是通过软件来进行解决的,常见的软件有LVS、Nginx、apache等,它们是基于Linux系统并且开源的负载均衡策略。

配置反向服务代理器:

什么是反向服务呢?

首先说下正向服务, 例如爬虫程序, 我们主动出击去获取资源. 而反向服务我们是等待用户来访问.

区别在于主动和被动.

你可能感兴趣的