Nginx基础及应用

负载均衡平摊单个服务器的压力,单个服务没必要用nginx的负载均衡功能,负载集群才需要;
用Nginx可以方便挂SSL证书,多个不同的服务也可以挂一个域名上面;
另外如果加了nginx还有其他功能比如gzip,限流,ip屏蔽静态文件也可以单独放nginx上面,
nginx对静态文件读取处理得比较好。

Nginx简介

  1. Nginx是一个高性能的http和反向代理服务器,特点是内存占用少、并发能力强。专为性能优化而开发,性能是其第一追求,其实际性能非常强悍,能经受高并发的考研,报告显示其能支持5万并发连接。
  2. 稳定,支持应用的热更新,可以实现7*24小时不间断工作。

反向代理:

  1. 正向代理:对客户端不透明,需要在客户端配置代理服务器做跳板。
  2. 反向代理:对客户端透明,客户端将请求发送给反向代理服务器,由反向代理服务器自行选择目标服务器完成数据交互。反向代理服务器和目标服务器组成了一个完整的体系,但只对外暴露反向代理服务器,此时真实的目标服务器的ip和端口等信息被隐藏起来,达到了隔离和保护的目的

负载均衡:

  1. 当目标服务器由于业务量增长而采用副本集群部署后,在采用反向代理为外部集中暴露的前提下,需要代理服务器将访问负载平均地转发到各个目标服务器实例上去。

动静分离:

  1. 当服务访问压力很大时,可以将动态资源和静态资源分别放在不同的目标服务器上,功能分离后一方面可以提升各自的解析性能,另一方面可以方便针对性的性能升级。用Nginx根据不同的资源类型将请求分发到不同的目标服务器或集群,就达到了动静分离的目的。

高可用:

常用命令:

./sbin/nginx -v  //查看nginx版本
./sbin/nginx -t  //验证配置合法性
./sbin/nginx  //启动nginx
./sbin/nginx -s stop  //停止nginx
./sbin/nginx -s reload  //热加载配置文件

配置

配置文件分为3块:

  1. 全局块:影响nginx服务器整体运行的参数
user  nobody;  //执行程序的用户名
worker_processes  4;  //worker进程数,反映了并发能力,通常与cpu核数相等

error_log  logs/error.log;  //错误日志-记录位置
error_log  logs/error.log  info;  //错误日志-级别,可选级别有[debug、info、notice、warn、error、crit、alert、emerg],生产环境【warn、error、crit】三选一

pid        logs/nginx.pid;  //进程id记录的文件位置
  1. events块:影响nginx服务器与用户网络连接:
worker_connections 1024  //代表每个worker支持的最大连接数
  1. http块:
    • http全局块:
    • http-server块:

反向代理:仅对外暴露Nginx服务器,隐藏真实服务器,提高安全性。

  1. 配置实例一(简单转发):
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        server_name  127.0.0.1;
		location / {
            proxy_pass  http://127.0.0.1:8080;  # 转发到目标服务器
        }
    }	
}
  1. 配置实例二(根据路由规则分发到不同目标服务器):
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    gzip  on;

    server {
        listen       80;
        server_name  127.0.0.1;
		
        # 波浪线表示路由中包含“/edu/”,就转发到该路径,注意完整的路由除了“/edu/”,必须包含后续	
        # 如:http://localhost:9090/edu/login.html
	location ~ /edu/ {
            proxy_pass  http://127.0.0.1:8081;  # 转发到8081服务器
        }	
	location ~ /org/ {
            proxy_pass  http://127.0.0.1:8080;  # 转发到8080服务器
        }
    }	
}
  • server-location:

1.=:用于不含正则表达式的uri前,要求请求路由与指定uri严格匹配,如果匹配成功,就立即处理该请求,停止向下搜索。
2.~:表示uri包含正则表达式,且大小写敏感。
3.~:表示uri包含正则表达式,且大小写不敏感。
4.^~:用于不含正则表达式的uri前,要求Nginx服务器找到标识uri和请求字符串匹配度最高的location后,立即使用次location处理请求,而不再使用location块中的正则uri和请求字符串做匹配。
注意:如果uri包含正则表达式,则必须要有【】或【
】标识。

负载均衡和高可用:

均衡策略:

  • 轮询:每个请求按照时间顺序,轮流转发到副本集群中的各目标服务上,默认策略。
upstream myServerName {
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
  • weight:加权轮询,默认值为1,权重越大者,命中比例更大。
upstream myServerName {
	server 127.0.0.1:8080 weight=1;
	server 127.0.0.1:8081 weight=4;
}
  • ip_hash:根据请求者的ip计算hash,将每个请求固定的转发到集群实例上,可以用于session共享。
upstream myServerName {
        ip_hash;
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
  • fair:根据集群实例的响应时间来决定,响应快的优先分配(需要安装扩展模块)。
  • check:根据集群实例的健康状况来转发请求(需要安装扩展模块)。
  • url_hash:根据请求的url计算hash,将每个请求固定的转发到集群实例上(需要安装扩展模块)。

动静分离:

严格意义上讲就是将动态和静态请求进行区别对待,分发到各自的后端服务器,方便缓存实施和有针对性的性能增强。

  1. 直接将静态资源分离为独立的域名,部署再独立的服务器上,Nginx直接根据域名或者路由转发请求(主流方式)。
  2. 动态和静态资源混合部署,利用Nginx通过路由来分离请求,甚至可以针对不同类型的文件配置不同的过期时间。

location的expires参数可以向浏览器指定资源的过期时间,利用浏览器的缓存机制减少对服务器的请求和流量。浏览器需要某资源时,发现它还没过期,就发送资源的签名给服务器,服务器用浏览器发来的的签名与本地的对比:

若没有变化:服务器就返回304,浏览器直接使用本地的缓存的静态资源【Status Code: 304 Not Modified】。
若有变化:则服务器返回200,同时返回最新的静态资源。

http {
    include       mime.types;
    default_type  application/octet-stream;
    gzip  on;

    server {
        listen       80;
        server_name  127.0.0.1;

        # 需注意配置方式,是一种拼接。
        # 浏览器访问地址:http://localhost:8080/static/kkk.jpg
        # 特别注意:图片文件磁盘路径:G:\test\【static】\kkk.jpg
        # 浏览器访问:http://192.168.2.200/static/,可以看到G:\test\static目录下的文件列表
        # 浏览器访问:http://192.168.2.200/static/FeiQ.exe,浏览器直接下载附件
	location /static {
            root G:/test/;
	    expires 10d; #30m:30分钟,2h:2小时,30d:30天
	    autoindex on;
        }
    }	
}

主-备高可用集群

对外暴露集群的虚拟ip

  1. 准备两台服务器
  2. 两台服务器分别安装Nginx和keepalived
  3. 修改keepalived配置文件/etc/keepalived/keepalived.conf

原理

  1. 进程模型:Nginx是多进程的,一个master,多个worker;master是多路复用器【最好与linux服务器搭配食用,才能发挥多路复用IO的性能优势】。
  2. master负责监控和管理各worker的生命周期,某些worker退出后,master负责启动新worker补充。
  3. master进程负责请求的接入,worker以抢占的方式去master处获取请求并做后续处理。
  4. master进程统一加载配置信息,并统一分发,方便配置的热更换。
  5. 多worker进程模式的优点:
  • 每个worker运行在独立的进程里面,不需要加锁,避免了锁的开销,提升性能。
  • 进程隔离,能方便问题的查找。
  • worker运行在独立进程中,可以避免相互干扰,一个进程故障或退出也不会影响其他worker,影响面被局限在一个worker的范围内,服务整体仍然可用。master也会尽快启动新worker进程补上。
  • 【woker_processes 4】worker数量设置,一般与cpu核心数相等最为适宜。
  1. worker连接数设置:
  • 每个请求占用几个连接?

静态资源请求:占用2个连接。
动态转发请求:占用4个连接。

  • 每个worker最大支持几个连接?总共支持的最大连接数?最大并发数是多少?

worker_connections 1024
表示每个worker最大支持1024个连接。
总的最大连接数就是4 * 1024个。
针对不同类型的连接并发数就是除以2或4。

posted @ 2020-06-03 16:40  JaxYoun  阅读(174)  评论(0编辑  收藏  举报