配置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
}
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的负载均衡策略有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 |
标记服务器永久停机了。 |
注意:
弊端:
轮询策略弊端,不能解决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的数值和被访问的几率成正比。
注意:
负载均衡器按照客户端IP地址的分配方式,可以确保相同客户端的请求一直发送到相同的服务器。这样每个访客都固定访问一个后端服务器。
(每个请求按访问ip的hash结果进行分配,这样每个访客固定访问一个后端服务器,可以解决session问题)
upstream foo {
ip_hash;
server localhost:8001
server localhost:8002;
server localhost:8003;
server localhost:8004;
}
注意:
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,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中。
在实际运用中,需要根据不同的场景选择不同的策略,大多是多种策略结合使用以达到实际需求的性能
按后端服务的响应时间来分配请求,响应时间短的优先分配。
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系统并且开源的负载均衡策略。
配置反向服务代理器:
什么是反向服务呢?
首先说下正向服务, 例如爬虫程序, 我们主动出击去获取资源. 而反向服务我们是等待用户来访问.
区别在于主动和被动.