Nginx

简介

Nginx应该是现在最火的web和反向代理服务器,没有之一。她是一款诞生于俄罗斯的高性能web服务器,尤其在高并发情况下,相较Apache,有优异的表现。那除了负载均衡,她还有什么其他的用途呢,下面我们来看下。

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

一、ContOS7 yum安装Nginx

1、添加nginx到yum源

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

2、安装nginx

yum install -y nginx

3、启动nginx

systemctl start nginx.service

4、开机启动

systemctl enable nginx.service

5、开放80端口

添加防火墙白名单

firewall-cmd --permanent --zone=public --add-port=80/tcp

重启防火墙

firewall-cmd --reload

二、静态代理

Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。

三、反向代理

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

我们换个方式理解,就是当外部网络对内部网络器是不能直接访问的,要通过一个代理服务器才能进行访问,而外部网络看到的只是代理服务器,反馈也是由代理服务器返回的,外部网络对于代理服务器与内部网络直接的具体情况是不可见的。

#HTTP服务器
server {
	#监听80端口,80端口是知名端口号,用于HTTP协议
	listen       80;

	#定义使用www.xx.com访问
	server_name  www.helloworld.com;

	#首页
	index index.html

	#指向webapp的目录
	root D:1_WorkspaceProjectgithubzpSpringNotesspring-securityspring-shirosrcmainwebapp;

	#编码格式
	charset utf-8;

	#代理配置参数
	proxy_connect_timeout 180;
	proxy_send_timeout 180;
	proxy_read_timeout 180;
	proxy_set_header Host $host;
	proxy_set_header X-Forwarder-For $remote_addr;


	#反向代理,proxy_pass后不加/,nginx会将location路径匹配到代理地址中
	location /test1 {
		proxy_pass http://localhost:8080;
	}
	#反向代理,proxy_pass后加/,nginx不会将location路径匹配到代理地址中
	location /test/ {
		proxy_pass http://localhost:9090/;
	}
	#反向代理的路径(和upstream绑定),会映射到负载均衡上
	location / {
		proxy_pass http://serviceCluster;
	}
	#反向代理,静态站点,转发任何请求到 index.html
	location /h5 {
		root /app/dist;
		index index.html;
	}
	#静态文件,nginx自己处理
	location ~ ^/(images|javascript|js|css|flash|media|static)/ {
		root /data/file;
		#过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。
		expires 30d;
	}
}

注:在nginx中配置proxy_pass反向代理时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走

四、负载均衡

Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。常用的负载均衡策略有

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

1、轮询

将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

2、加权轮询

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

3、ip_hash(源地址哈希法)

根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

4、随机

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。

5、least_conn(最小连接数法)

由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

五、限流

Nginx的限流模块,是基于漏桶算法实现的,在高并发的场景下非常实用。

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

1、配置参数

1)limit_req_zone定义在http块中,$binary_remote_addr 表示保存客户端IP地址的二进制形式。

2)Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,所以示例中区域可以存储160000个IP地址。

3)Rate定义最大请求速率。示例中速率不能超过每秒100个请求。

2、设置限流

burst排队大小,nodelay不限制单个请求间的时间。

六、缓存

1、浏览器缓存,静态资源缓存用expire。

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

2、代理层缓存

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

七、黑白名单

1、不限流白名单

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

2、黑名单

除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等

八、跨域

location ~ ^/api/ {
    proxy_pass http://localhost:8080;
    
    # allow origin list
    set $ACAO '*';
    # set single origin
    if ($http_origin ~* (www.helloworld.com)$) {
      set $ACAO $http_origin;
    }
    if ($cors = "trueget") {
        add_header 'Access-Control-Allow-Origin' "$http_origin";
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    }

    if ($request_method = 'OPTIONS') {
      set $cors "${cors}options";
    }

    if ($request_method = 'GET') {
      set $cors "${cors}get";
    }

    if ($request_method = 'POST') {
      set $cors "${cors}post";
    }
  }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的奇葩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值