一、概述

       nginx是一款免费开源的高性能 HTTP 代理服务器及反向代理服务器 (Reverse Proxy)产品,同时它还可以提供 IMAP/POP3 邮件代理服务等功能。高并发性能很好,官方测试能够支撑 5 万的并发量;运行时内存和 CPU 占用率低,配置简单,容易上手,而且运行非常稳定。

引申:

       tengine是由淘宝发起的Web服务器项目。在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine完全兼容Nginx,因此可以参照Nginx的方式来配置Tengine。Tengine的性能和稳定性已经在大型的网站如淘宝,天猫,优酷,全球速卖通,Lazada,阿里云等得到了很好的检验。在HTTP应用流量入口网关的基础上,逐步支持4/7层TLS,TCP,UDP和GRPC多协议路由能力,打造全场景通用网关。从2011年12月开始,Tengine成为一个开源项目,核心成员来自于淘宝,蚂蚁,阿里云,搜狗等互联网企业。

二、常用功能

1、反向代理

       客户端向服务器发送请求时,首先经过 Nginx 服务器,由nginx将请求分发到相应的 WEB 服务器。正向代理是代理客户端,代理客户端访问客户端无法访问的服务器,比如翻墙技术。而反向代理则是代理服务器,反向代理服务器和目标服务器对外就是一个服务器,由反向代理服务器从服务器获取数据,然后返回给客户端,此过程客户端对访问的具体服务器是无感知的,暴露的是反向代理服务器的地址,隐藏了真实服务器地址。Nginx 在提供反向代理服务方面,通过使用正则表达式进行相关配置,采取不同的转发策略,配置相当灵活,而且在配置后端转发请求时,完全不用关心网络环境如何,可以指定任意的IP地址 和端口号,或其他类型的连接、请求等。

2、负载均衡

       一方面是将单一的重负载分担到多个网络节点上做并行处理,每个节点处理结束后将结果汇总返回给用户,这样可以大幅度提高网络系统的处理能力;另一方面将大量的客户端并发请求或数据流量分担到多个后端网络节点分别处理,这样可以有效减少前端用户等待相应的时间。而 Nginx 负载均衡都是属于后一方面,主要是对大量前端访问或流量进行分流,已保证前端用户访问效率,并可以减少后端服务器处理压力。

  • 加权轮询。此为nginx默认负载均衡规则,接收到请求按照顺序逐一分发到服务器。可以给不同的服务器设置一个权重,配置不同服务器上的请求率。具体设置权重是根据服务器的资源配置和使用情况分配。

   nginx配置方式如下

upstream mycom{
      server 10.11.0.1:8080 weight=6; #设置权重
      server 10.11.0.1:8081 weight=2;
}
location / {
      include uwsgi_params;
      uwsgi_pass mycom; #连接负载均衡服务器
}
  • ip_hash。每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。
upstream mycom{
    ip_hash; #基于ip_hash策略
    server 10.11.0.1:8080 weight=6; 
     server 10.11.0.1:8081 weight=2;
}
location / {
     include uwsgi_params;
     uwsgi_pass mycom; #连接负载均衡服务器
}
  • fair。智能调整调度算法,动态根据后端服务器的请求到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少; (nginx默认不支持fair算法,需安装upstream_fair模块)。
upstream mycom{
     server 10.11.0.1:8080 weight=6; 
     server 10.11.0.1:8081 weight=2;
     fair; #智能调整调度算法
}
location / {
     include uwsgi_params;
     uwsgi_pass mycom; #连接负载均衡服务器
}
  • url_hash。按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。(nginx默认不支持这种调度算法, 需安装nginx的hash软件包)。

      如,指定不同的url访问不同的服务器

upstream mycom{
     server 10.11.0.1:8080 weight=6; 
     server 10.11.0.1:8081 weight=2;
}
upstream youcom{
     server 10.11.0.3:8080 weight=6; 
     server 10.11.0.4:8081 weight=2;
}
location /user/ {
     include uwsgi_params;
     uwsgi_pass mycom; #连接负载均衡服务器
}
location /order/ {
     include uwsgi_params;
     uwsgi_pass youcom; #连接负载均衡服务器
}

3、Web 缓存

       nginx 可以作为前置缓存服务器,它被用于缓存前端请求,从而提高 Web服务器的性能。Nginx 会对用户已经访问过的内容在服务器本地建立副本,这样在一段时间内再次访问该数据,就不需要通过 Nginx 服务器向后端发出请求。减轻网络拥堵,减小数据传输延时,提高用户访问速度。

三、配置

nginx.conf精简配置如下

worker_processes 1; #并行进程,按照cpu核数配置
events {
         worker_connections 1024; #每个work支持的最大连接数
}
#http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求
数上限等。
http {
        include mime.types;
        default_type application/octet-stream;
 				sendfile on;
				keepalive_timeout 65;
				#这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技
术的产生是为了节省互联网服务器硬件成本。后面会详细介绍虚拟主机的概念。
每个 http 块可以包括多个 server 块,而每个 server 块就相当于一个虚拟主机。
而每个 server 块也分为全局 server 块,以及可以同时包含多个 locaton 块。
				server {
         	 			# 1 listen *:80 | *:8080 #监听所有80端口和8080端口
								# 2 listen IP_address:port #监听指定的地址和端口号
								# 3 listen IP_address #监听指定ip地址所有端口
								# 4 listen port #监听该端口的所有IP连接
								listen 80; # 监听该端口的所有ip连接
								server_name localhost; # 虚拟主机配置,基于ip或域名
        # 这块的主要作用是基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚
拟主机名称(也可以是IP别名)之外的字符串(例如 前面的 /uri-string)进行匹配,对特定的请求进行
处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
        # 语法为:    location [ = | ~ | ~* | ^~] uri {  }
        #   1、= :用于不含正则表达式的 uri 前,要求请求字符串与 uri 严格匹配,如果匹配成功,就停止继
续向下搜索并立即处理该请求。
       #    2、~:用于表示 uri 包含正则表达式,并且区分大小写。
			 #		3、~*:用于表示 uri 包含正则表达式,并且不区分大小写。
			 #		4、^~:用于不含正则表达式的 uri 前,要求 Nginx 服务器找到标识 uri 和请求字符串匹配度最高的
location 后,立即使用此 location 处理请求,而不再使用 location 块中的正则 uri 和请求字符串做匹
配。
			#    注意:如果 uri 包含正则表达式,则必须要有 ~ 或者 ~* 标识。
      #     优先级: = > ^~ > ~ / ~* >模糊匹配
				location / {
								root html;
								index index.html index.htm; # 设置网站的默认首页。可以有多个,中间用空格隔开
			}

			error_page 500 502 503 504 /50x.html;
			location = /50x.html {
							root html;
			}
		}
}

四、tengine

1、内存监控

2、后端服务器健康检查

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐