就目前来说nginx已经是计算机系统的必备组件了。主要的作用有静态资源代理、反向服务代理,负载均衡,虚拟主机,fastcgi等。
一.静态资源代理,将静态资源放置到nginx,静态资源直接通过nginx获取,能够降低服务端的压力,并实现前后分离。
server{
listen: 80,
location /{
#这里的静态资源的关联资源建议使用相对路径
root 静态资源的路径
}
}
二.反向代理,用户的请求通过nginx代理访问服务器,然后将服务器的响应转发给用户端。
server {
listen80;
location /abc {
proxy_pass http://192.168.20.1:8080/abc;
}
}
三.负载均衡,在项目访问量大的情况下,服务器的响应速度就会变慢或者请求超时,所以为了避免这种情况,一般服务都是集群部署。集群部署就需要对用户的请求进行转发,而决定这里的转发策略,就是负载均衡策略。nginx主要有六种负载均衡策略,分别为:轮询、权重轮询、ip_hash、最少连接、响应时间(第三方)、url_hash(第三方)
其中相关的参数有:
fail_timeout | 与max_fails结合使用,认为不可用统计时间范围。 |
max_fails | 设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了, |
fail_time | 服务器会被认为停机的时间长度,默认为10s,超过统计时间会重新开始计量。 |
backup | 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。 |
down | 标记服务器永久停机了。 |
1.轮询
nginx默认为轮询,表示对列表中服务逐个进行发送请求
upstream dynamic_zuoyu {
server localhost:8080;
server localhost:8081;
}
2.权重轮询
根据权重比例进行请求路由发送
upstream dynamic_zuoyu {
server localhost:8083 weight=1 max_fails=3 fail_timeout=20s;
server localhost:8084 weight=2 max_fails=3 fail_timeout=20s;
}
上述配置表示发送到8084的比例是8083的两倍,20秒之后有三次请求失败,那么就任务服务不可用,就进行剔除。超过统计期之后会重新加入进来。
3.ip_hash
是通过对请求来源的ip进行计算从而得到路由的一种方式。基于用户在访问期间ip不会变化的基本假设。但是ip_hash的问题在于如果后端服务宕机,那么用户的请求还是会被发送到那台机器。使用ip_hash的策略主要是为了解决session未做集中管理的问题。
upstream dynamic_zuoyu {
ip_hash;
server localhost:8080 weight=1;
server localhost:8083 weight=1 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
4.least_connt
将请求发送到链接数较少的后端服务器,据此策略。后端处理的请求量大概相同。这对于响应时间较长的请求是一种解决办法。但是还是不能解决后端服务宕机的问题。
upstream dynamic_zuoyu {
least_conn;
server localhost:8080 weight=1;
server localhost:8083 weight=1 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
5.响应时间
响应时间是按照服务器的响应时间来分配请求的策略,响应时间短的优先分配
但是该功能需要安装第三方插件相关安装过程如
upstream dynamic_zuoyu {
fair;
server localhost:8080 weight=1;
server localhost:8083 weight=1 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
6.url_hash
根据请求的url的hash结果来分配请求,是的每个url定向到同一个后端服务器。改策略主要解决同一请求的缓存问题,如果结合缓存来使用的话。会提升系统性能。
http://chenlinux.com/2010/03/02/loadbalance-in-nginx-using-url_hash/
upstream dynamic_zuoyu {
hash $request_uri;
server localhost:8080 weight=1;
server localhost:8083 weight=1 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
四、虚拟主机
nginx虚拟主机主要为了解决同一台nginx代理多个网站不同域名同一端口或者或者同一ip不同端口的问题。在配置文件中每个server表示一个虚拟主机。
server {
listen 192.168.100.102:6666;
server_name 192.168.100.102:6666;
location / {
root /var/www/bt;
index index.html index.php;
}
}
server {
listen 192.168.100.102:8888;
server_name 192.168.100.102:8888;
location / {
root /var/www/accp;
index index.html index.php;
}
}