Nginx相对于Tomcat处理静态资源的能力更加高效,所以在生产环境下一般都会将Nginx可以作为静态web服务器来部署静态资源
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { # 监听80端口 listen 80; # 服务器的IP地址(域名) server_name localhost; # 处理80端口的location块,用来匹配客户端请求的url,匹配到后去根目录找对应的文件 location / { # 指定静态资源的根目录,默认当前目录是配置文件所在的conf目录,html目录和conf目录同级 root html; # 指定默认访问的首页(可以指定多个,中间用空格隔开,以";"结尾),默认当前目录是我们指定的根目录 index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
正向代理: 为了从目标服务器取得内容, 客户端向代理服务器发送一个请求并指定目标服务器的地址,然后代理将请求转发给目标服务器并将获得的内容返回给客户端
反向代理: 用户直接访问反向代理服务器就可以获得目标服务器的资源(用户不需要指定目标服务器的地址), 反向代理服务器负责将请求转发给目标服务器
正向代理和反向代理的区别
随着业务流量越来越大并且业务逻辑也越来越复杂, 单台服务器的性能及单点故障问题就凸显出来了, 因此需要多台服务器组成应用集群进行性能的水平扩展
负载均衡的规则
名称 | 说明 |
---|---|
轮询(默认方式) | 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器挂掉能自动剔除 |
weight | 权重方式(权重默认为 1,权重越高请求分发机率越高) |
ip_hash | 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器(IP地址固定),可以解决session的问题 |
least_conn | 依据最少连接方式,分发给处理连接少的服务器 |
url_hash | 依据url分配方式,一个固定的url对应的服务器也是固定的 |
fair | 按后端服务器的响应时间来分配请求,响应时间短的服务器优先分配请求 |
# 不指定默认采用轮询的方式实现负载均衡 upstream myserver{ server 192.168.77.130:8080; server 192.168.77.130:8081; } # 采用权重的方式实现负载均衡 upstream myserver{ server 192.168.77.130:8080 weight=10; server 192.168.77.130:8081 weight=5; } # 访问ip的hash结果实现负载均衡 upstream myserver{ ip_hash; server 192.168.77.130:8080; server 192.168.77.130:8081; } # 按后端服务器的响应时间实现负载均衡 upstream myserver{ server 192.168.77.130:8080; server 192.168.77.130:8081; fair; }
需求: 浏览器地址栏输入地址http://192.168.17.129/edu/a.html,根据负载均衡效果将请求平均分配到两台tomcat服务器的8080和8081端口中
第一步: 在http块中添加upstream指令定义一组服务器,新增一个server块采用负载均衡的规则将请求转发到集群中的某一台服务器
第二步: 访问http://192.168.77.130/edu/a.html发现结果在8080和8081两个服务之间切换
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # upstream指令可以定义一组服务器 upstream targetServer{ # 默认使用轮询的方式实现负载均衡 server 192.168.17.129:8080; server 192.168.17.129:8081; } server { # 监听的端口 listen 80; # nginx服务的地址 server_name localhost; location / { # 添加定义的服务地址,使用定义好的targetServer proxy_pass http://targetServe } } }
Nginx动静分离不能理解成只是单纯的把动态页面和静态页面物理分离,严格意义上说应该是把动态请求跟静态请求分开
动静分离从目前实现角度来讲大致分为两种
对于不经常变动的资源可以使用Expires参数给一个资源(请求)设定一个过期时间,这样浏览器每次访问的时候可以走缓存的数据,减少浏览器与服务器之前的请求
第一步: 在liunx系统中/data目录下准备静态资源,如www/a.html和image/1.png
第二步: 在nginx的配置文件的location块配置要访问的静态资源路径
server { # 监听的端口 listen 80; # nginx的服务地址 server_name 192.168.77.129; # http://192.168.77.129/www/a.html location /www/ { root /data/; index index.html index.htm; # http://192.168.77.129/image/ location /image/ { root /data/; # 显示image目录的内容 autoindex on; } }
需求: 打开浏览器在浏览器地址栏输入地址www.123.com跳转到liunx系统中tomcat的主页面中
第一步: 在windows系统的host文件进行域名和ip对应关系的配置
192.168.17.129 www.123.com
第二步: 在nginx.conf配置文件中添加proxy_pass属性进行请求转发的配置(反向代理配置)
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 在http块中新增一个server块,用来将请求转发 server { # 监听80端口 listen 80; server_name 192.168.17.129; location / { # 反向代理配置,将请求转发到目标服务器 proxy_pass http://127.0.0.1:8080; } } }
使用nginx反向代理(nginx监听端口为9001),根据访问的路径跳转到不同端口的服务中,注意放行8080/8081/9001对外访问的端口
第一步: 准备两个文件夹安装两个tomcat服务器,修改服务器的conf/erver.xml配置文件,修改它们的端口号防止冲突
第二步: 在两个Tomcat的webapps目录下分布创建web项目edu和vod并存放对应的测试文件a.html
8080
8081
第三步: 在http块中添加一个新的server块并添加两个location块
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 在http块中新增一个server块,用来将请求转发 server { # 监听9001端口 listen 9001; server_name 192.168.17.129; location ~ /edu/ { # 反向代理配置,将请求转发到目标服务器 proxy_pass http://127.0.0.1:8080; } location ~ /vod/ { # 反向代理配置,将请求转发到目标服务器 proxy_pass http://127.0.0.1:8081; } } }