Nginx
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数。
支持热部署,启动简单。
配置文件
下载安装
(1)下载nginx,解压安装
(2)命令
在nginx.exe的目录地址栏,输出cmd
启动命令: start nginx
重新启动: nginx -s reload
停止服务: nginx -s stop
例如:
也可以在任务管理器中找到nginx进程,停止进程
(3)查看是否启动 ( http://localhost:80)
文件目录
(1)conf:核心配置文件
例如:nginx.conf(主要配置文件)
# 主进程叫master,负责管理子进程,子进程叫worker
# worker_processes配置项表示开启几个业务进程,一般和cpu核数有关
worker_processes 1;
events {
worker_connections 1024;
}
http {
# include表示可以引入其他文件,此处表示引入http mime类型
include mime.types;
default_type application/octet-stream; # 默认使用二进制流的方式传输
sendfile on;
keepalive_timeout 65; # 指定每个TCP连接最多可以保持多长时间,Nginx 的默认值是75秒,有些浏览器最多只保持60秒
# 虚拟主机,可以配置多个
server {
listen 80; # 端口
server_name localhost; # ip以及域名 (域名默认端口80)
location / {
# 路径匹配之后,哪个目录下去匹配相应的网页,html是相对路径
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html; # 错误页面
location = /50x.html {
root html;
}
}
server {
}
配置文件详情
(1.1)全局模块 ---- 设置一些影响Nginx服务器整体运行的配置指令
例如:
worker_processes 1; 默认为1,表示开启一个业务进程
worker_processes 配置是 Nginx 服务器并发处理服务的关键配置,该值越大,可以支持的并发处理量也越多,但是会受到硬件、软件等设备的约束。
(1.2)events 模块 -----主要影响Nginx服务器与用户的网络连接
设置包括:是否开启对多 work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个 work process 可以同时支持的最大连接数等
例如:
worker_connections 1024; 单个业务进程可接受连接数(最大连接数:1024)
(1.3)http 模块 ---- 代理、缓存和日志定义等绝大多数功能和第三方模块的配置
可以包括 http全局块、server块
全局块包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等
例如:
default_type application/octet-stream; 如果mime类型没匹配上,默认使用二进制流的方式传输。
keepalive_timeout 65; 指定每个TCP连接最多可以保持多长时间,Nginx 的默认值是75秒,有些浏览器最多只保持60秒
每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
(1.4)server 模块 --- 和虚拟主机有密切关系,从用户角度看,虚拟主机和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。
配置是本虚拟机主机的监听(端口号)配置和本虚拟主机的名称(域名)或IP配置。
例如:
listen:端口号(域名默认80)
server_name:ip以及域名
location:基于 Nginx 服务器接收到的请求字符串(例如 server_name/uri-string),对虚拟主机名称(server_name)之外的字符串(例如 /uri-string)进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能
同时配置root和proxy_pass选项时,两个选项只会二选一执行
例如:
location / {
root html/dist;
index index.html index.htm;
}
location /admin{
proxy_pass http://localhost:8086/admin/;
}
proxy_pass:设置后端代理服务器的地址。这个地址(address)可以是一个域名或ip地址和端口
proxy_set_header:就是可设置请求头-并将头信息传递到服务器端。
root:location中root指定的只是相对路径,需要和路径结合起来映射地址
location指令:
= 开头表示精确匹配。如 A 中只匹配根目录结尾的请求,后面不能带任何字符串;
^~ 开头表示uri以某个常规字符串开头,不是正则匹配;
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配;
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到。
(2)html:存放静态页面文件(index.html、50x.html)
(3)logs:存储日志文件
(4)docs:存放文档
(5)temp:存放临时文件
运行原理
Nginx的进程是使用经典的「Master-Worker」模型,Nginx在启动后,会有一个master进程和多个worker进程。
master进程主要用来管理worker进程
master接收来自外界的信号,向各worker进程发送信号,监控worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。
worker进程主要处理基本的网络事件,多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的。一个请求,只可能在一个worker进程中处理。
worker进程的数量是可以设置的,一般会设置与机器cpu核数一致
反向代理
简单描述:代理服务器来接受Internet上的连接请求,然后将请求转发给内部网络上的服务器。
详细过程:将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器 IP地址。
优点
(1)可以起到保护网站安全的作用,因为任何来自Internet的请求都必须先经过代理服务器。
(2)前后端分离,提升开发效率,提升页面性能,优化用户体验
(3)实现负载均衡,提高系统的可伸缩性与可靠性,提高系统的吞吐率
案例
location / {
root html/dist;
index index.html index.htm;
}
location /admin{
proxy_pass http://localhost:8086/admin/;
}
正向代理
简单描述:通过代理服务器来访问目标服务器,这种代理服务就称为正向代理
负载均衡
简单描述:通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。
优点
(1)提高系统的可伸缩性与可靠性
(2)提高系统的吞吐率
负载均衡的方式
(1) 轮询法(nginx默认策略)
它是upstream模块默认的负载均衡默认策略。
会将每个请求按时间顺序分配到不同的后端服务器。
(2)weight权重模式(加权轮询)
指定轮询的访问几率,用于后端服务器性能不均时调整访问比例。
(3)ip_hash
指定负载均衡器按照基于客户端IP的分配方式(将ip映射成hash值----hash算法),这个方法确保了相同的客户端的请求一直发送到相同的服务器,可以解决session不能跨服务器的问题。
ip_hash算法是取ip地址的前三段数字进行hash映射,如果只有最后一段不一样,也会发送到同一个Tomcat里面。
注意事项:一旦使用了ip_hash,当我们需要移除一台服务器的时候,不能直接删除这个配置项,而是需要在这台服务器配置后面加上关键字down,表示不可用;因为如果直接移除配置项,会导致hash算法发生更改,后续所有的请求都会发生混乱;
(4)least_conn(最少连接):把请求转发给连接数较少的后端服务器。
(5)fair(第三方):按照服务器端的响应时间来分配请求,响应时间短的优先分配。
(6)url_hash(第三方):该策略按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,需要配合缓存用。
参考链接: https://blog.csdn.net/zxd1435513775/article/details/102508463
参考链接: https://www.cnblogs.com/mklblog/p/16478798.html