Nginx浅析
负载均衡
负载
访问压力,上千万,几百万的访问
均衡
平均分配(物理平均,逻辑平均)
nginx
Nginx 是一个高性能的HTTP和反向代理web服务器
http服务
接受http请求,处理返回http响应
tomcat 也是http服务(tomcat处理动态数据)
反向代理
服务器根据客户端的请求
从其关联的一组或多组后端(如Web服务器)上获取资源
正向代理
客户端向服务器端发出的请求
niginx的window安装
解压安装包即可使用
文件结构
conf
nginx配置文件,核心加载nginx.conf所在路径
logs 日志文件
access.log,error.log
access.log通过nginx访问的客户端浏览记录
error.log记录nginx启动运行的各种错误
nginx的启动和停止
扩展了3个文件bat
nginx_start.bat:启动文件
nginx_stop.bat:停止
nginx_reload.bat:禁止使用
nginx入门测试案例
负载均衡:对后端集群的负载均衡访问
动静分离:将静态文件img,js,css,html放到nginx处理,不需要占用后端服务器的资源了
conf文件夹下的核心配置文件nginx.conf
自定义配置一个server{}
server { //server表示一个虚拟的服务器,每一个虚拟服务器都可以根据配置接收http请求,返回http相应
listen 80; //监听的端口号,满足端口号的请求才能继续判断
server_name www.order.com; //通过请求头HOST头携带的域名判断所属权
location / { //用来匹配域名和端口后的字符串的
http://www.order.com/user/query/point?userId=1 可以通过不同的location来定义不同的请求地址的处理逻辑,/表示通配,任意地址都能匹配
proxy_pass http://127.0.0.1:8090/; //指向真正转发到的后端服务器地址
}
}
server {
listen 80;
server_name www.order.com;
location / {
proxy_pass http://127.0.0.1:8090/;
}
}
nginx转发的流转逻辑
1.客户端发出请求
2.host文件根据端口号,域名进行解析,解析成ip地址发送到nginx中
3.nginx根据剩余的url字符串匹配location /
:表示通配
4.进入location找到proxy_pass
5.根据proxy_pass后面的值转发
负载均衡
轮询(RoundRobin) ------ 常用
权重(weight) ----- 常用
ip的hash黏着 ---- 不常用
其他负载均衡 ----- 不常用
轮询(RoundRobin)
平均分配并发访问
实现配置
匹配成功后,对应的域名会被移除
http://www.order.com/index.html
nginx监听端口
location匹配 / 成功
/index.html
proxy_pass 转发访问
转发虚拟域名orderuser
默认轮询从upstream获取一个server
http://127.0.0.1:8090/index.html
upstream orderuser{
server 127.0.0.1:8090;
server 127.0.0.1:8091;
server 127.0.0.1:8092;
}
server {
listen 80;
server_name www.order.com;
location / {
#proxy_pass http://127.0.0.1:8090/;
proxy_pass http://orderuser/;
}
}
权重(weight)
权:权衡,重:重量(并发占比)
upstream orderuser{
server 127.0.0.1:8090 weight=1;
server 127.0.0.1:8091 weight=5;
server 127.0.0.1:8092 weight=10;
}
server {
listen 80;
server_name www.order.com;
location / {
#proxy_pass http://127.0.0.1:8090/;
proxy_pass http://orderuser/;
}
}
静态文件访问
使用:root
nginx作为http服务器可以处理静态文件,html, js, css, img
测试案例
修改之后只能通过nginx访问静态资源
http://image.jt.com/image/Penguins.jpg
server {
listen 80;
server_name image.jt.com;
#/image/Penguins.jpg
location / {
root c:\\upload;
#类似proxy_pass,是转发访问资源的关键字,指定的位置不是后端服务器,而是nginx所在服务器的磁盘路径. c:\\upload/image/1.jpg
}
}
location匹配规则
优先级从上到下,一个server可以配置多个location,根据配置规则优先级关系,寻找一个处理当前请求url的真正逻辑地址
精确匹配 =/image:url域名端口后的字符串完全相等
带有修饰的前缀字符串 ~^/image:url域名端口后以image开始的
不带修饰的前缀字符串 /image:url域名端口后以image开始的
正则匹配关系 ~正则表达式:满足正则表达式的url匹配成功
通配 /:匹配所有任意的url地址,优先级最低
包含关系的优先级:
有修饰前缀的字符串匹配,有包含关系是,根据最大匹配长度原则,优先级最高
正则包含关系时,配置在上的location优先级越高
测试案例
以下访问地址拿到什么返回值
http://localhost/
返回 206
http://localhost/image
返回 200
http://localhost/image/te
返回 201
http://localhost/image/test/haha
返回203
http://localhost/haha.png
返回 204
server{
listen 80;
server_name localhost;
location =/image {return 200}
location~^/image {return 201}
locatoin /image {return 202}
location ~^/image/test{return 203}
location ~.png$ {return 204}
location ~.(pgn|jpg|gif)$ {return 205}
location / {return 206}
}
利用不同的匹配规则,实现动态资源的nginx转发访问
http://www.order.com/user/query/point?userId=1
http://www.order.com/order/pay?orderId=a
server{
listen 80;
server_name www.order.com;
location / {
#proxy_pass http://127.0.0.1:8090/;
#proxy_pass http://orderuser/;
root easymall;
}
#无修饰的前缀匹配其他的动态资源访问
location /user {
proxy_pass http://orderuser/user;
}
location /order{
proxy_pass http://orderuser/order;
}
}