Nginx是一个高性能的http和反向代理服务器(高并发,3万-5万并发量)
nginx的location匹配规则(优先级)
location 匹配规则 匹配的是访问的url在域名和端口号之后的字符串
例如 image.taobao.com/upload/2/df/3/d/3/c/e/3/d/3/asdlkfjlsdjf.jpg
○ 精确匹配 = 例如=/image
○ 字符串前缀匹配^~ 例如^~/image
○ 按照配置顺序的正则匹配,配置在上优先级更高~ 例如~.png$
○ 不带任何修饰的前缀匹配 例如/image当有匹配的包含关系时,先按照匹配规则的顺序,从上到下优先级降低,当前缀匹配有包含关系,按照最大匹配长度原则匹配
○ 最低优先级的就是通配符 “/”
例如在nginx.conf中定义一个server
server{
listen 80;
server_name www.taobao.com;
location =/image {return 200}
location ^~/image {return 201}
location ^~/image/test {return 202}
location /image {return 203}
location ~.png$ {return 204}
location ~.(png|jpg|gif)$ {return 205}
location / {return 206}
}
匹配优先级
www.taobao.com 返回206
www.taobao.com/image 返回200
www.taobao.com/image/tes 返回201
www.taobao.com/image/test.png 返回202
www.taobao.com/haha.png 返回204
负载均衡nginx
定义轮询的虚拟域名
先在nginx.conf中配置虚拟域名
权重
基于轮询的结构,利用关键字实现权重的访问,服务器中实现逻辑的占比均衡
weight:指定权重值(比例的值)
down:当服务器不需要被均衡访问时,可以设置,访问将忽略这个服务器
upstream taobao{
server 192.168.1.55:8091 weight=5;
server 192.168.1.55:8092 weight=2;
server 192.168.1.55:8093 down;
}
在server的location转向,设置访问虚拟域名taobao实现轮询;
#前台服务器
server {//每一个代表一个虚拟的服务器 接收请求放回响应
listen 80; //当前虚拟服务器监听的端口
server_name www.taobao.com;//监听访问80端口的所有域名 请求host头判断,一旦匹配端口80,域名是正确,进入location的逻辑
#charset koi8-r;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {//比对url地址的域名端口后的字符串 "/"通配符,任意字符串都能匹配成功,进入location
#proxy_pass http://localhost:8081;
proxy_pass http://taobao; //nginx的反向代理服务器的转发目的地proxy_pass的值,代替域名和端口
proxy_connect_timeout 600;
proxy_read_timeout 600;
}
}
session黏着(ip黏着)------已经废弃
为了解决session在集群共享的问题;
以前的登录逻辑使用session会话技术;
session存储共享数据供会话用户使用,是一种服务器端的技术,但是多个服务器的集群中,一个session对象无法被其他服务器共享—session共享;
nginx提供ip黏着的方式解决session共享
客户端ip地址不变,访问转发的后端服务器永远是那一个
只需要在配置中添加ip_hash的关键字
upstream taobao{
ip_hash;
server 192.168.1.55:8091 weight=5;
server 192.168.1.55:8092 weight=2;
server 192.168.1.55:8093 down;
}
互联网框架中使用SSO单点登录+redis实现解决session的问题,所以黏着已经很少使用了
本地文件路径映射
默认nginx的目录是不能直接浏览的
autoindex on; 打开目录
autoindex_exact_size off; #改为off后,显示出文件的大概大小,单位是kB或者MB或者GB
autoindex_localtime on; #显示的文件时间为文件的服务器时间
limit_rate_after 10m; #10m之后下载速度为10k
limit_rate 10k;
root d:\javaenv\yumrepository; #设置映射的本地路径
例如定义一个yum源服务器
#yum源服务器
server {
listen 80;
server_name yum.repo.com;
charset utf-8;
#access_log logs/host.access.log main;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
root d:\\javaenv\yumrepository;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
定义图片服务器
#图片服务器
#将image.taobao.com映射到c:\\img-upload路径下
server {
listen 80;
server_name image.taobao.com;
location / {
root c:\\img-upload;
}
}