一、server_name
解释server_name的意义,文章最后会解释server在整个访问请求的流程;先上一段配置;
server {
listen ip:端口;
# 当listen出现了ip时,server_name就失去了意义。所以不配置也罢了。
#server_name 域名;
access_log 日志地址1;
error_log 日志地址2;
location / {
root /data/www/151;
index index.html index.htm;
}
}
客户端通过域名访问服务器时会将域名与被解析的ip一同放在请求中。当请求到了nginx中时。nginx会先去匹配ip,如果listen中没有找到对应的ip,就会通过域名进行匹配,匹配成功以后,再匹配端口。
当这三步完成,就会找到对应的server的location对应的资源。
二、location配置
location = / { # 仅仅匹配请求 / [ configuration A ] } location / { # 匹配所有以 / 开头的请求。 # 但是如果有更长的同类型的表达式,则选择更长的表达式。 # 如果有正则表达式可以匹配,则优先匹配正则表达式。 [ configuration B ] } location /documents/ { # 匹配所有以 /documents/ 开头的请求。 # 但是如果有更长的同类型的表达式,则选择更长的表达式。 # 如果有正则表达式可以匹配,则优先匹配正则表达式。 [ configuration C ] } location ^~ /images/ { # 匹配所有以 /images/ 开头的表达式,如果匹配成功,则停止匹配查找。 # 所以,即便有符合的正则表达式location,也不会被使用 [ configuration D ] } location ~* .(gif|jpg|jpeg)$ { # 匹配所有以 gif jpg jpeg结尾的请求。 # 但是 以 /images/开头的请求,将使用 Configuration D [ configuration E ] }
location / {
root html; // 指的是/usr/local/nginx/html
index index.php index.html index.htm;
}
三、负载均衡策略
轮询 默认方式 weight 权重方式 ip_hash 依据ip分配方式 least_conn 最少连接方式
1、轮询
最基本的配置方法,上面的例子就是轮询的方式,它是upstream模块默认的负载均衡默认策略,
备注:在轮询中,如果服务器down掉了,会自动剔除该服务器
2、权重
在轮询策略的基础上指定轮询的几率
备注:在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;
weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍
upstream dynamic_zuoyu { server localhost:8080 weight=2; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082 backup; #tomcat 8.5 server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0 }
3、ip_hash
指定负载均衡器按照基于客户端IP的分配方式,这个方法确保了相同的客户端的请求一直发送到相同的服务器
#动态服务器组 upstream dynamic_zuoyu { ip_hash; #保证每个访客固定访问一个后端服务器 server localhost:8080 weight=2; #tomcat 7.0 server localhost:8081; #tomcat 8.0 server localhost:8082; #tomcat 8.5 server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0 }
- 在nginx版本1.3.1之前,不能在ip_hash中使用权重(weight)。
- ip_hash不能与backup同时使用。
- 此策略适合有状态服务,比如session。
- 当有服务器需要剔除,必须手动down掉。
四、压力测试
# ab -n 2000 -c 2000 http://192.168.4.5/ Benchmarking 192.168.4.5 (be patient) socket: Too many open files (24) //提示打开文件数量过多
五、proxy_pass
假设server_name为www.xxx.com 当请求http://www.xxx.com/aming/a.html的时候,以上示例分别访问的结果是 示例2: location /aming/ { proxy_pass http://192.168.1.10/; ... }
结果2:http://192.168.1.10/a.html 示例3: location /aming/ { proxy_pass http://192.168.1.10/linux/; ... } 结果3:http://192.168.1.10/linux/a.html