nginx常用功能一文概览

1 概述

nginx常用功能有三:正反代理、负载均衡、动静分离。

近一年的时间,一头扎在B/S结构的项目上,nginx常见的应用形式基本都能接触到一点点,这里简单总结下,便于日后自己复习。

2 代理

用一个例子来说明:
A是一名顾客,要买一套房子;B是中介,手里有C的房源信息;C是房屋的拥有者,准备出售房屋。理论上A直接找C买了房子就可以了,但是A和C互相不认识,A和C无法达成交易。A找了B,B找了C,这样就可以实现A和C的交易了。在这个例子中,B的角色就是一个代理的角色。

正向代理和反向代理
A找C买房,即A——>C这个方向是正向,那么C——>A就是反向。

如果A是不固定的,C是固定的,即房源只有一套。B是为卖房者代理,这里的B就是反向代理。
如果A是固定的,即只有一个顾客,C是不固定的,有若干套房源。B为买房者代理,这里的B就是正向代理。

2.1 正向代理

目的:实现Server_1 访问 Server_3。

现状:服务器1无法直接访问服务器3;找来服务器2,既可以访问服务器1,也可以访问服务器3;

实现:在服务器上使用nginx将server_3进行一次代理,server_1访问server_2,透过代理可实现访问到server_3

看图示:
在这里插入图片描述
看配置:

server {
	resovler 8.8.8.8; #必须要有resovler,且不能有hostname
	resoler_timeout 30s;
	listen 8080;
	location / {
		proxy_pass http://$http_host$request_url; #定义代理的url
		proxy_set_header Host $http_host;
		proxy_buffers 256 4k; #配置缓存大小
        proxy_max_temp_file_size 0; #关闭磁盘缓存读写减少I/O
        proxy_connect_timeout 30; #设置连接超时时长
        proxy_cache_valid 200 302 10m; #设置http不同状态的缓存时长
        proxy_cache_valid 301 1h;
        proxy_cache_valid any 1m;
	}
}

2.2 反向代理

看图示:
在这里插入图片描述
看配置:

server {
	listen 8081;
	server_name localhost; #非域名访问,可以不用设置
	location / {
	proxy_pass http://192.168.28.10:80;
	proxy_set_header $http_host; #代理后,携带host信息
	proxy_set_header X-Real-IP $remote_addr; # X-Real-IP 真实的客户端IP
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # X-Forwarded-For 记录经过所有代理(匿名除外)
	}
}

3 负载均衡

负载均衡:所谓负载均衡,是将高负载均衡散落到多台服务器上,实现压力的均衡。
下面举4个负载均衡的示例,一起看下:

3.1 负载均衡的4种方式

3.1.1 weight

upstream的负载均衡,后面加上一个自定义的字符串,字符串可在后面的server中被引用;
weight是权重,可以根据机器配置定义权重。
weigth参数表示权值,权值越高被分配到的几率越大。

    upstream myserver {
        server 192.168.28.11:80 weight=3;
        server 192.168.28.12:80 weight=2;
        server 192.168.28.13:80 weight=3;

3.1.2 ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
简而言之,同一个IP发起的请求,会分配给同一个服务上。看示例:

	upstream myserver {
		ip_hash;
		server 192.168.28.14:80;
		server 192.168.28.15:80;
      }

3.1.3 fair

此种方式,按后端服务器的响应时间来分配请求,响应时间短的优先分配。
fair功能的使用,需要依赖第三方的组件,在nginx编译的时候,需要将此功能编译好。

	upstream myserver {
		server 192.168.28.16:80;
		server 192.168.28.17:80
		fair;
        }

3.1.4 url_hash

此种方式,按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
url_hash功能的使用,需要依赖第三方的组件,在nginx编译的时候,需要将此功能编译好。
在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。

	upstream backend {
		server 192.168.28.18:3128;
		server 192.168.28.19:3128;
		hash $request_uri;
		hash_method crc32;
        #}

3.2 负载均衡设备控制

看个例子:

    upstream myserver {
        server 192.168.28.21:80;
        server 192.168.28.22:80 weight=2;
        server 192.168.28.24:80 down;
        server 192.168.28.25:80 backup;
        server 192.168.28.26:80 weight=3 max_fails=3 fail_timeout=15; #3次失败,关闭15s

每个设备的状态情况如下表所示:

序号状态描述
1down表示单前的server暂时不参与负载
2weight权重,weight越大,负载的权重就越大
3max_fails允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream模块定义的错误
4fail_timeoutmax_fails次失败后,暂停的时间
5backup其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻

4 动静分离

在一个网页页面中,存在动态资源和静态资源的区分。使用 可以看到:

在这里插入图片描述

在 ( F12 ) 的检查页面中,动态资源和动态资源具有明显的分类。具体如下

资源类型资源描述备注
动态资源XHR(XMLHttpRequest)/fetch后端资源
静态资源js文件、img图片、media媒体文件、font字体文件、doc文本文件前端资源

所谓动静分离,即将动态资源和静态资源分离,我们使用nginx可以实现。
在nginx的实现中,是使用一个server,创建多个location。每个location可以指定不同的路径,从而实现对不同服务的访问。

下面是一个完整的动静分离nginx配置,请仔细阅读:

server {
listen 8080;
server_name localhost;

#静态资源
location / {
root /home/dist;  #定义静态资源文件
index index.htm index.html;  #定义index文件名,默认访问的文件
tryfiles $uir $uri/ /index.html;  #优先访问根目录下的index.html文件
}

#动态资源
location /server {
proxy_set_header Host $host; #把原http请求的host字段也转发出来,明确访问的是哪个域名的资源。
proxy_set_header REMOTE-HOST $remote_addr; # 在web服务器端获得用户的真实ip 需配置条件
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #记录每一层转发的代理IP,目的是找到原始IP。
proxy_pass http://192.168.28.10; #反向代理的地址
	}
}
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值