-
Nginx是什么?
Ngnix是高性能的HTTP和反向代理服务器,处理高并发能力是十分强大的,能经受高负载的考验,有报告表明能支持高达50000个并发连接数 -
Nginx的内容:
正向代理:需要在客户端配置代理服务器进行指定网站的访问
反向代理:暴露的是代理服务器的地址,隐藏了正式服务器的IP地址
负载均衡:增加了服务器的数量,然后将请求分发到各台服务器上,将原先请求集中到的单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
动静分离:可以将静态资源的请求和动态资源的请求分别转发处理 -
Nginx的常用命令:
#查看Nginx版本号
nginx -v
#启动Nginx
nginx
#停止Nginx
nginx -s stop
#重新加载Nginx
nginx -s reload
-
Nginx的配置文件:
配置文件位置为:/usr/local/nginx/conf/nginx.conf
配置文件的内容:
(1)全局块:配置服务器整体运行的配置命令,比如worker_process 4,处理并发数为4
(2)events块:影响Nginx服务器与用户的网络连接,比如worker_connections 1024,支持的最大连接数为1024
(3)http块:这里还包括两个部分,http全局块和server块 -
Nginx配置反向代理:
#1、假设Nginx服务器IP地址为192.168.27.220,Nginx监听端口9001,
#然后将请求反向代理转发到本地Tomcat(127.0.0.1:8080)。效果就是浏览器访问
#http://192.168.27.220:9001,Nginx会将请求转发到本地8080端口的服务,
#即实际访问到的是http://192.168.27.220:8080
server {
#Nginx的当前server监听9001端口
listen: 9001;
#Nginx的server_name为本机的IP地址
server_name: 192.168.27.220
location / {
#location里面配置反向代理的服务器地址
proxy_pass http://127.0.0.1:8080;
#location其他配置
root html;
index index.html index.htm;
}
}
#2、Nginx实现根据不同的路径,转发请求到不同的服务器:
#访问http://192.168.27.220:9001/html/,直接跳转到127.0.0.1:8080
#访问http://192.168.27.220:9001/css/,直接跳转到127.0.0.1:8081
#访问http://192.168.27.220:9001/js/,直接跳转到127.0.0.1:8082
#访问http://192.168.27.220:9001/image/,直接跳转到127.0.0.1:8083
server {
#Nginx的当前server监听9001端口
listen 9001;
#Nginx的server_name为本机的IP地址
server_name 192.168.27.220;
#html路径下的请求发送到8080端口的Tomcat服务器
location ~ /html/ {
proxy_pass http://127.0.0.1:8080;
}
#css路径下的请求发送到8081端口的Tomcat服务器
location ~ /css/ {
proxy_pass http://127.0.0.1:8081;
}
#js路径下的请求发送到8082端口的Tomcat服务器
location ~ /js/ {
proxy_pass http://127.0.0.1:8082;
}
#image路径下的请求发送到8083端口的Tomcat服务器
location ~ /image/ {
proxy_pass http://127.0.0.1:8083;
}
}
- Nginx配置负载均衡
#1、访问http://192.168.27.220/html/a.html,将请求负载均衡到本地8080端口Tomcat和本地8081Tomcat两个服务中
#用户自定义负载均衡服务器列表,myserver是自定义名字
upstream myserver {
#一共有两台服务器进行负载均衡,下面是服务器列表
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
server {
#Nginx的当前server监听80端口(http访问不用输入端口号)
listen 80;
#Nginx的server_name为本机的IP地址
server_name: 192.168.27.220;
location / {
#将请求反向代理到用户自命名的myserver负载均衡服务器列表中
proxy_pass http://myserver;
#location其他配置
root html;
index index.html index.htm;
}
}
7、负载均衡服务器分配策略
#1、轮询(Nginx默认),每个请求按时间顺序逐一分配到不同的后端服务器,
#如果服务器宕机,能自动剔除
upstream myserver {
#这两个服务器轮流被分配请求:12121212……
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#2、weight,代表权重值,默认为1,权重越高则被分配的客户端就会正比增多
upstream myserver {
#30%的请求由下面的8080服务器处理
server 192.168.27.220:8080 weight=3;
#70%的请求由下的的8081服务器处理
server 192.168.27.220:8081 weight=7;
}
#3、ip_hash:每个请求按照访问ip的hash结果分配,这样每一个访客就可以
#固定访问一个后端服务器,你这台设备一直都是由同一个服务器处理
upstream myserver {
#以下两个服务,由访客ip的hash值决定谁来负载
ip_hash;
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#4、fair(第三方),按后端服务器的响应时间来分配请求,响应时间短的优先分配
upstream myserver {
#以下两个服务,响应时间短的优先分配
fair;
server 192.168.27.220:8080;
server 192.168.27.220:8081;
}
#5、负载均衡的其他设置
upstream myserver {
#正常参与负载均衡的服务器
server 192.168.27.220:8080;
#后面加了down,表示该服务器不参与负载均衡
server 192.168.27.220:8081 down;
#该服务器允许请求失败的次数为3,经历了3次请求失败后,暂停服务20秒
server 192.168.27.220:8082 max_fails=3 fail_timeout=20s;
}
8、Nginx配置动静分离
#在Linux中,/data/front/www/目录下放着html文件,/data/static/image/目录下放着图片文件,
#Linux服务器IP为192.168.27.220,Nginx监听80端口。现在需要实现:
#1、访问http://192.168.27.220/www/a.html,访问到/data/front/www/a.html文件
#2、访问http://192.168.27.220/image/1.jpg,访问到/data/static/image/1.jpg文件
server {
#Nginx的当前server监听80端口(http访问不用输入端口号)
listen 80;
#Nginx的server_name为本机的IP地址
server_name: 192.168.27.220;
#http://……/www/xxx.html的url,访问/data/front/www/xxx.html
location /www/ {
root /data/front/;
#其他的location配置
index index.html index.htm;
}
#http://……/image/xxx.jpg的utl,访问/data/static/image/xxx.jpg
location /image/ {
root /data/static/;
#配置开启autoindex为on,则浏览器访问文件夹会有文件列表
autoindex on;
}
}
- Nginx的一些底层原理
(1)分为master和worker,master负责分配进来的请求,worker负责接收master的请求并进行相关操作
(2)master监控和管理请求,有请求进来,master通知worker,worker争抢请求并处理
(3)一个master多个worker:可以使用命令 nginx -s reload 热部署,利用Nginx进行热部署操作。且每个worker都是独立的进程,如果有其中的一个worker出现问题,其他worker都是独立的,会继续进行争抢,实现请求的过程,不会造成服务的中断
(4)设置多少个worker合适:worker数和服务器的CPU数相等是最为适宜的
(5)连接数worker_connection:发送请求,占用了worker的2个或者4个连接数
(6)Nginx有一个master,有4个worker,每个worker支持最大的连接数1024,支持的最大并发数是:普通的静态访问最大并发数是:worker_connections * worker_processes / 2;而如果是http作为反向代理来说,最大并发数量应该是worker_connections * worker_processes / 4
10、Nginx学习资源:https://www.bilibili.com/video/av68136734