Nginx是一个http服务器(web服务器)。是一个使用c语言开发的高性能的http服务器及反向代理服务器。Nginx是一款高性能的http服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。cpu、内存等资源消耗却非常低,运行非常稳定。nginx常用做静态内容服务和反向代理服务器,直面外来请求转发给后面的应用服务(tomcat,django什么的),tomcat更多用来做做一个应用容器,让java web app跑在里面的东西,对应同级别的有jboss,jetty等东西。
(1)正向代理
Nginx不仅可以做反向代理,实现负载均衡,还能作正向代理来进行上网功能,正向代理:如果把局域网外的Internet想象成一个大资源库,则局域网中的客户端要访问Internet,则需要代理服务器来访问,这种代理服务器叫做正向代理。
(2)反向代理
反向代理,就是客户端对代理无感知的,因为客户端不需要任何配置文件就可以访问,我们只需要将请求发送到反向代理服务器,由反向代理服务器去选择目标服务器获取数据后,再返回给客户端,此时反向代理服务器和目标服务器对外就是一个服务器,暴露的是代理服务器地址,隐藏了真实服务器IP地址。
单个服务器解决不了访问,我们增加服务器数量,然后将请求分发到各个服务器上,将原先请求集中到单个服务器上的情况改为将请求分发到多个服务器上,将负载分发到不同的服务器,也就是我们所说的负载均衡
为了加快网站访问速度,可以把动态资源和静态页面由不同的服务器来解析,加快解析速度,降低原来单个服务器的压力
查看版本号:./nginx -v
启动nginx:./nginx
关闭nginx:./nginx -s stop
从新加载nginx:./nginx -s reload
请查看:https://blog.csdn.net/yunnansunshitao/article/details/106608978
(1)实现效果:浏览器地址栏输入http://192.168.17.129/edu/a.html,负载均衡效果,平均8080和8081端口中
(2)准备工作
准备两台Tomcat服务器,一台8080,一台8081
在两台Tomcat里面webapps目录中,创建名称是edu文件夹,在edu文件夹中创建页面a.html,用于测试
配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream apis {
server 192.168.17.129:8080 weight=5;
server 192.168.17.129:8081 weight=10;
}
server {
listen 80;
server_name 192.168.17.129;
location /apis {
proxy_pass http://apis;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_buffer_size 64k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
}
location / {
root html;
add_header 'Access-Control-Allow-Origin' '*';
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
(3)Nginx分配服务器的策略
第一种:
轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
第二种:
weight:weight代表权重默认为1,权重越高被分配的客户端越多,如:
upstream apis {
server 192.168.17.129:8080 weight=5;
server 192.168.17.129:8081 weight=10;
}
第三种:
ip_hash:每个请求按访问ip的hash结果分配,这样固定访问一个后端服务器,可以解决session的问题,如:
apis server_poll{
ip_hash
server 192.168.5.21:8080
server 192.168.5.21:8081
}
第四种:
按后端服务器的响应时间来分配请求,响应时间短的优先分配
apis server_pool{
server 192.168.5.21:8080
server 192.168.5.21:8081
fair
}
什么是动静分离?
Nginx动静分离简单的说就是把动态跟静态请求分开,不能理解成只是单纯的把动态页面和静态页面物理分离,可以理解为用Nginx处理静态页面,Tomcat处理动态页面。
动静分离实现大致可以分为两种:
(1)一种是把静态文件独立成单独的域名,放在独立的服务器上,也是目前主流推荐的方案
(2)另一种是动态跟静态文件混合在一起,通过Nginx来分开
通过location指定不同的后缀名实现不同的请求转发,通过expire是参数设置,可以使浏览器缓存过期时间,减少与服务器之前的请求和流量。具体Expire定义:是给一个资源设定一个过期时间,也就是说无需去服务端验证,直接通过浏览器自身确认是否过期即可,所以不会产生额外的流量,它适合不经常变动的资源。如设置3d,表示在3天之内访问这个url,发送一个请求,比对服务器该文件最后更新时间没有变化,则不会从服务器抓取,返回状态码304,如果有修改,则直接从服务器从新下载,返回状态码200
(3)配置实例
输入测试地址:http://192.168.17.129/www/a.html,http://192.168.17.129/image/01.jpg就可访问到相应的静态资源
什么是Nginx的高可用?
当只有一台Nginx服务器时,客服端访问的Nginx挂掉就无法正常访问,这是配置高可用就可以解决该问题,此时就需要配置两台Nginx服务器,一台是主服务器MASTER,一台是备用服务器BACKUP,我们对外的虚拟ip192.168.17.50首先访问的是nginx1,当nginx1挂掉还可以访问nginx2来访问;配置高可用需要两台Nginx服务器、keepalived、虚拟ip。
好了,到这里Nginx的反向代理、负载均衡、动静分离、高可用集群就分析完啦!!!!