课程链接:Nginx动力节点
开始时间:2022-04-26
Nginx (engine x) 是一个高性能的Web服务器和反向代理服务器,也可以作为邮件代理服务器。
比如我们看这个图,平时测试我们一般是用一个Tomcat,但是Tomcat有上限设置,如果超过上限就要排队,那么可能用多个Tomcat分担压力,但是分担压力会导致域名入口不一致的情况,此时就使用一个Nginx
他自己不处理,只是负责转发
这就是一个反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器;
生活上的例子:比如你现在很无聊,想找人聊天,这时候你拨通了联通客服10010电话(Nginx),联通的总机可能随机给你分配一个闲置的客服(Tomcat)给你接通。
那正向代理呢?
正向代理类似一个跳板机,代理访问外部资源。比如:我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器,它能访问那个我不能访问的网站,于是我先连上代理服务器,告诉它我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。(科学上网VPN)
代理客户端去请求服务器,隐藏了真实客户端,服务器并不知道真实的客户端是谁。
安装linux版的Nginx
linux中键入
yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -y
将Nginx放到装软件的目录下
解压下载下来的nginx文件,执行命令:tar -zxvf nginx-1.14.2.tar.gz
切换至解压后的nginx主目录,执行命令:cd nginx-1.14.2
在nginx主目录nginx-1.14.2下执行命令:./configure --prefix=/usr/local/nginx
(其中–prefix是指定nginx安装路径) 注意:等号左右不要有空格
执行命令进行编译:make
执行命令进行安装:make install
安装成功后,可以切换到/usr/local/nginx目录下,查看内容
启动Nginx
注意先关闭防火墙
systemctl status firewalld 查看防火墙运行状态
systemctl stop firewalld 关闭防火墙
Active: inactive (dead) since 四 2022-03-24 09:18:40 CST; 2s ago
systemctl start firewalld 开启防火墙
systemctl enable firewalld 设置防火墙开机启动
切换到nginx安装目录的sbin目录下,执行:./nginx
键入自己linux的ip
关闭Nginx
kill -TERM 主pid,就是上图root那个端口7773
静态网站部署
Nginx是一个HTTP的web服务器,可以将服务器上的静态文件(如HTML、图片等)通过HTTP协议返回给浏览器客户端(JSP这种动态资源是识别不了的)
先把配置文件从linux下载下来
[root@localhost nginx]# cd conf
[root@localhost conf]# sz nginx.conf
在文件中修改
location / {
root html;
index index.html index.htm;
}
//上面这段话复制,然后修改成下面这样
location / {
root html;
index index.html index.htm;
}
location /ace {
root /opt/www;
index login.html;
}
修改好后上传并覆盖
拷贝我们的静态资源,布局和上面写的一致
正常打开了
负载均衡
在网站创立初期,我们一般都使用单台机器对外提供集中式服务。随着业务量的增大,我们一台服务器不够用,此时就会把多台机器组成一个集群对外提供服务,
但是,我们网站对外提供的访问入口通常只有一个,比如 www.web.com。那么当用户在浏览器输入www.web.com进行访问的时候,如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡要做的事情。
负载均衡通常是指将请求"均匀"分摊到集群中多个服务器节点上执行,这里的均匀是指在一个比较大的统计范围内是基本均匀的,并不是完全均匀。
可以用硬件负载,也可以软件负载
例如我开3台tomcat,端口分别为8081 8082
那么我给他一个统一的访问入口
就在nginx.conf中这样配置
proxy_pass和upstream对应一致
此时访问域名就是
如果要获取端口号,在原来直接访问tomcat时,访问8081就返回8081,访问8082就返回8082
那现在返回什么呢?返回Nginx的80
那如果我在8081的tomcat中把web写死成8081,比如返回成【服务端口】-8081
8082的那个写死8082返回成【服务端口】-8081
那么他会在8081 8082反复横跳
返回【80】-8081 或者【80】-8082
常用负载均衡策略
轮询模式(类似于时间片轮转)
默认是按照轮询模式,一人一次(机器的性能、处理速度差不多,不然会有堆积)
upstream backserver {
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
权重(类似于优先级)
还可以设置权重
每个请求按一定比例分发到不同的后端服务器,weight值越大访问的比例越大,用于后端服务器性能不均的情况
upstream backserver {
server 192.168.0.14 weight=5;
server 192.168.0.15 weight=2;
}
一个处理5个,然后分给另一个处理2个,再分配回去
ip_hash
ip_hash也叫IP绑定,每个请求按访问ip的hash值分配,这样每个访问客户端会固定访问一个后端服务器,可以解决会话Session丢失的问题
算法:
hash("124.207.55.82") % 2 = 0, 1
upstream backserver {
ip_hash;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
比如我有两台服务器,那我就用hash值对2求余,分配到两台服务器上
如果不用这种方法,我的session是记不住的,登录信息就保存不下来
最少连接(类似于短作业优先)
web请求会被转发到连接数最少的服务器上
谁有空给谁
upstream backserver {
least_conn;
server 127.0.0.1:8080;
server 127.0.0.1:9090;
}
静态代理
把所有静态资源的访问改为访问nginx,而不是访问tomcat,这种方式叫静态代理。因为nginx更擅长于静态资源的处理,性能更好,效率更高。
所以在实际应用中,我们将静态资源比如图片、css、html、js等交给nginx处理,而不是由tomcat处理。
在nginx.conf的location中配置静态资源所在目录实现
例如:当访问静态资源,则从linux服务器/opt/static目录下获取(举例)
location ~ .*/(css|js|img|images) {
root /opt/static;
}
xxx/css
xxx/js
xxx/img
xxx/images
我们将静态资源放入 /opt/static 目录下,然后用户访问时由nginx返回这些静态资源
动静分离
Nginx的负载均衡和静态代理结合在一起,我们可以实现动静分离,这是实际应用中常见的一种场景。
动态资源,如jsp由tomcat或其他web服务器完成 静态资源,如图片、css、js等由nginx服务器完成
它们各司其职,专注于做自己擅长的事情 动静分离充分利用了它们各自的优势,从而达到更高效合理的架构
整个架构中,一个nginx负责负载均衡,两个nginx负责静态代理。Nginx在一台Linux上安装一份,可以启动多个Nginx,每个Nginx的配置文件不一样即可
前面的Nginx遇到静态资源,分配给后面的Nginx而不是Tomcat,后面的遇到静态资源,就处理
结束时间:2022-04-28