Nginx
文章目录
1、Nginx简介
简介
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯人开发的,公开版本1.19.6发布于2020年12月15日。
- 其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、简单的配置文件和低系统资源的消耗而闻名。2022年01月25日,nginx 1.21.6发布。
- Nginx是一款轻量级的Web服务器反向代理服务器及电子邮(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、淘宝等等。
优点
- Nginx 可以在大多数Linux OS 上编译运行,并有windows移植版。 Nginx 的1.20.0稳定版已经于2021年4月20日发布,一般情况下,对于新建站点,建议使用最新稳定版作为生产版本,已有站点的升级急迫性不高。Nginx 的源代码使用 2-clause BSD-like license。
- Nginx 是一个很强大的高性能web和反向代理服务,它具有很多非常优越的特性:
- 在连接高并发的情况下,Nginx是Apache)服务不错的替代品:Nginx在美国是做虚拟主机生意的老板们经常选择的软件平台之一。能够支持高达 50,000 个并发连接数的响应,感谢Nginx为我们选择了 epoll and kqueue作为开发模型。
- Nginx不仅可以正向代理还可以反向代理。
- 高可用集群,可启动多个。
Nginx基本的功能
反向代理
均衡
动静分离
高可用
2、Nginx安装及常用命令【windows】
1、官网:nginx news
2、打开文件夹在命令行中执行 nginx.exe
3、执行命令行之后
启动nginx成功
4、常用命令
- nginx.exe 【启动nginx服务】
- nginx -s reload 【重新加载配置文件】
- nginx -s stop 【直接关闭服务】
- nginx -s quit 【有序关闭服务】
- taskkill /f /t /im nginx.exe 【杀死nginx的所有进程】
5、Nginx配置文件
- 大体可分为三个部分:
- **全局块:**从文件开始到events之间,主要是nginx的全局配置,如:配置用户组、允许生成的worker process数、日志等。
- **events块:**主要配置nginx服务器与用户的网络连接,worker process最大连接数等。
- **http块:**改动最大的模块,在这里面配置我们要代理的服务器 即 server块。
#全局块
#user nobody;
worker_processes 1;
#events块
events {
worker_connections 1024;
}
#http块
http {
#http全局块
include mime.types;
#可在http的全局块中配置负载均衡
default_type application/octet-stream;
keepalive_timeout 65;
#server块
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
}
3、Nginx 反向代理
什么是反向代理
- 通过Nginx的反向代理我们只需要将请求发送到反向代理服务器,由方向代理服务器去选择目标服务器获取数据后,在返回给客户端,此时反向代理服务器和目标服务器对外其实就是一个服务器,用户感知不到。暴露的是代理服务器的地址,隐藏了真实服务器的ip地址
图示:
对于客户端来说反向代理服务器是无感知的,反向代理服务器监听某个或某些端口,只要我们访问了这个端口,就会被Nginx拦截并将请求转到它所代理的真正服务器上。
通过Nginx的配置文件实现反向代理
**1、启动一个后台服务【端口 8081】 **
2、配置nginx配置文件
注意:如果80端口被占用了,我们可以将80端所占用的进程关掉,或者监听其他的端口。
3、启动nginx反向代理服务器 【nginx.exe当前文件夹命令行输入 nginx.exe】
4、访问
在地址栏输入:http://localhost:80/ nginx反向代理服务器机将我们的请求转到所代理的服务器地址 http://localhost:8081/ 【配置文件中配置】并进行访问
【由于我们80端口被其他进程占用了,我这里监听的端口为8888】
4、Nginx 负载均衡
负载均衡简介
- 负载均衡就是将负载【许多个请求】分摊到不同的的服务单元即服务器上。
- 通俗的讲就是将客户端发送来的所有请求通过反向代理服务器的放在均衡机制分发到多个服务器上,使得各个服务器上所承载的压力基本上相同 【轮训策略的情况下相同,压力可以根据服务器的性能分配】
图示:
同一个服务在多个端口运行,反向代理服务器会将多个请求转到不同的服务器上实现负载均衡
Nginx实现负载均衡 upstream
1、我们在不同的端口启动两个后台服务 【两个不同端口】**
- 8081端口
- 8082端口
2、配置nginx配置文件
注意:如果80端口被占用了,我们可以将80端所占用的进程关掉,或者监听其他的端口。 这里用的是8888端口
3、启动nginx反向代理服务器 【或重新加载配置文件 nginx -s reload】
4、访问
在地址栏输入:http://localhost:8888/ nginx反向代理服务器会将我们的请求交替转到到所代理的两个服务器地址 http://localhost:8081 和 http://localhost:8082 【负载均衡默认策略是轮询】
4.1 负载均衡策略
负载均衡的几种策略
- 轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器如果后端服务器down掉,能自动剔除,即一个一个的服务器一次轮转处理请求。
weight权重,默认为1,权重越高被分配到的用户请求就越多,能指定轮询机率,用于不同性能的服务器,性能高的就设置它的权限多一点。
upstream qiumin {
server 127.0.0.1:8081 weight=1; //权重为一
server 127.0.0.1:8082 weight=5; //权重为五 分配的请求数多一些
}
- ip_hash
每个请求按ip的hash结果分配,这样就访客固定访问一个后端服务器,能解决session问题。
upstream qiumin {
ip_hash //ip_hash
server 127.0.0.1:8081;
server 127.0.0.1:8082;
}
- fair (第三方)
按照后端的响应时间分配请求,后端服务器响应时间短的优先分配。
upstream qiumin {
server 127.0.0.1:8081;
server 127.0.0.1:8082;
fair //fair (第三方)
}
5、Nginx 动静分离
6、Nginx 高可用
7、Nginx的原理
nginx反向代理服务器有两个进程,一个是master进程负责管理worker进程,一个是worker进程负责处理客户端请求【竞争请求】。
master&worker工作图:
一个master多个worker的好处:
- 每个worker都是独立的进程,当其中的某个或某些worker不工作时,只要有一个worker在运行都可以处理客户端发送来的请求,不会服务中断。
- 一般我们将worker的数量设置与cpu数相等是最为合适的,可以充分的利用资源。
- 一个客户端请求占用2个或者4个worker connection连接。
- Nginx有一个master,有四个worker,每个worker支持的最大连接数为1024,则支持的最大并发数为:
- 普通的静态资源访问最大并发数是:worker connection连接数*worker线程数/2。
- http作反向代理最大并发数为:worker connection连接数*worker线程数/4。
个**worker connection连接。
- Nginx有一个master,有四个worker,每个worker支持的最大连接数为1024,则支持的最大并发数为:
- 普通的静态资源访问最大并发数是:worker connection连接数*worker线程数/2。
- http作反向代理最大并发数为:worker connection连接数*worker线程数/4。
qiumin