安徽省质量提升工程建设网站,我的网站模板下载不了,wordpress 安全狗,公司宣传册ppt文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍
Nginx是一个高性能的HTTP和反向代理服务器#xff0c;特点是占用内存少#xff0c;并发能力强#x… 文章目录 Nginx介绍Nginx的安装Nginx文件Nginx反向代理负载均衡nginx动静分离URLRewrite防盗链nginx高可用配置安全性Nginx限流Nginx缓存集成Lua脚本OpenRestry Nginx介绍
Nginx是一个高性能的HTTP和反向代理服务器特点是占用内存少并发能力强Nginx专为性能优化而开发能经受高负载的考验有报告表明能支持高达50000个并发连接数。
正向代理通过代理服务器访问目标服务器我们知道目标服务器的链接但无法直接访问目标服务器必须通过代理的方式访问。
反向代理一个请求访问目标服务器时请求先到达代理服务器由代理服务器转发给目标服务器此时反向代理服务器和目标服务器对外就是一个服务器暴露的是代理服务器地址隐藏了真实服务器IP地址。
反向代理 正向代理 Nginx的优缺点
优点
1.占用内存小可实现高并发连接处理响应快
2.可实现http服务器、虚拟主机、反向代理、负载均衡
3.Nginx配置简单
4.可以不暴露正式的服务器IP地址缺点
1.动态处理差Nginx处理静态文件好耗费内存少但是处理动态页面则很鸡肋现在一般前端用
2.Nginx作为反向代理抗住压力Nginx性能为啥这么高
1.异步非阻塞处理机制
2.epoll模型
3.提供队列排队解决Nginx应用场景
1.http服务器。Nginx是一个http服务可以独立提供http服务。可以做网页静态服务器。
2.虚拟主机。可以实现在一台服务器虚拟出多个网站例如个人网站使用的虚拟机。
3.反向代理负载均衡。当网站的访问量达到一定程度后单台服务器不能满足用户的请求时需要用多台服务器集
群可以使用nginx做反向代理。并且多台服务器可以平均分担负载不会应为某台服务器负载高宕机而某台服务器闲
置的情况。
4.nginx 中也可以配置安全管理、比如可以使用Nginx搭建API接口网关,对每个接口服务进行拦截。Nginx进程模型 Nginx的进程分为两种master进程和worker进程 work进程数量由work_processes决定的 master进程负责接收外界的信号和指令worker来负责工作master会监控worker Nginx模块化体系 Nginx工作原理
1.接收客户端请求当客户端发起HTTP请求时Nginx会监听指定的端口并接收请求
2.解析配置文件Nginx在启动时会加载并解析配置文件其中包含服务器设置、反向代理规则、缓存配置等
3.处理请求当收到客户端请求后Nginx会根据配置文件中的规则进行处理可根据请求的URL分配给不同的后端
服务Nginx可对请求进行一系列的处理操作包括访问控制、URL重写、gzip压缩、SSL/TLS加密等Nginx处理一个HTTP请求的全过程
1.Read Request Headers:解析请求头
2.Identify Configuration Block:识别由哪一个location进行处理匹配URL
3.Apply Rate Limits判断是否限速。
4.Perform Authentication:连接控制验证请求。例如可能根据Referer头部做一些防盗链的设置或者验证用户的权
限
5.Generate Content生成返回给用户的响应。为了生成这个响应做反向代理的时候可能会和上游服务进行通信
然后这个过程还可能会有些子请求或者重定向那么还会走一下这个过程。
6.Response Filters过滤返回给用户的响应。比如压缩响应或者对图片进行处理
7.记录日志Nginx的安装
1.获取nginx安装包
wget https://nginx.org/download/nginx-1.21.6.tar.gz
2.解压安装包
tar zxvf nginx-1.21.6.tar.gz3.配置
./configure4.编译安装
#编译
make
#安装
make install5.启动、关闭nginx服务
###启动服务
#需要先进入sbin目录下
cd /usr/local/nginx/sbin
#启动nginx服务
./nginx###关闭服务
#需要先进入sbin目录下
cd /usr/local/nginx/sbin
#关闭nginx服务
./nginx -s stop #快速停止
./nginx -s quit #优雅关闭在退出前完成已经接受的连接请求
./nginx -s reload #重新加载配置将nginx安装成系统服务
创建服务脚本
vi /usr/lib/systemd/system/nginx.service服务脚本内容
[Unit]
Descriptionnginx - web server
Afternetwork.target remote-fs.target nss-lookup.target[Service]
Typeforking
PIDFile/usr/local/nginx/logs/nginx.pid
ExecstartPre/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReoad/usr/local/nginx/sbin/nginx -s reload
Execstop/usr/local/nginx/sbin/nginx -s stop
ExecQuit/usr/local/nginx/sbin/nginx -s quit
PrivateTmptrue[Insta11]
WantedBymulti-user.target重新加载系统服务
systemctl daemon-reloadNginx文件
主要的文件有三个conf、html、logs
├── client_body_temp
├── conf
│ ├── fastcgi.conf 是fastcgi的配置文件
│ ├── fastcgi.conf.default
│ ├── fastcgi_params 是fastcgi的参数文件
│ ├── fastcgi_params.default
│ ├── mime.types 记录的是HTTP协议中的Content-Type的值和文件后缀名的对应关系
│ ├── mime.types.default
│ ├── nginx.conf 是Nginx的核心配置文件这个文件非常重要也是学习的重点
│ ├── nginx.conf.default
│ ├── scgi_params 是scgi的参数文件
│ ├── scgi_params.default
│ ├── uwsgi_params 是uwsgi的参数文件
│ ├── uwsgi_params.default
│ ├── koi-utf 与编码转换映射相关的配置文
件下面两个也是
│ ├── koi-win
│ └── win-utf
├── fastcgi_temp
├── html 存放nginx自带的两个静态的html页面
│ ├── 50x.html 访问失败后的失败页面
│ └── index.html 访问成功的默认首页
├── logs
│ ├── access.log 访问日志
│ ├── error.log 错误日志
│ └── nginx.pid 记录nginx的pid好
├── proxy_temp
├── sbin 存放执行程序文件nginx
│ └── nginx 用于控制Nginx的启动和停止
├── scgi_temp
└── uwsgi_temp nginx.conf
#user nobody;
worker_processes 1; #工作的进程个数#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;#pid logs/nginx.pid;events { #事件驱动模块worker_connections 1024; #一个work可以创建多少个连接
}http {include mime.types; #引入一个子配置文件mime.types记录返回的数据是什么类型的文件数据default_type application/octet-stream; #默认文件数据类型#log_format main $remote_addr - $remote_user [$time_local] $request # $status $body_bytes_sent $http_referer # $http_user_agent $http_x_forwarded_for;#access_log logs/access.log main;sendfile on; #数据零拷贝#tcp_nopush on;#keepalive_timeout 0;keepalive_timeout 65; #保持连接超时的时间#gzip on;server { #虚拟主机 vhostlisten 80; #监听的端口号server_name localhost; #主机名也可以配置域名#charset koi8-r;#access_log logs/host.access.log main;location / { #URI域名之后的路径root html; #从哪个目录下找这个主机index index.html index.htm; #默认页}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html; # 错误重定向URIlocation /50x.html {root html; }# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {# proxy_pass http://127.0.0.1;#}# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {# root html;# fastcgi_pass 127.0.0.1:9000;# fastcgi_index index.php;# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;# include fastcgi_params;#}# deny access to .htaccess files, if Apaches document root# concurs with nginxs one##location ~ /\.ht {# deny all;#}}# another virtual host using mix of IP-, name-, and port-based configuration##server {# listen 8000;# listen somename:8080;# server_name somename alias another.alias;# location / {# root html;# index index.html index.htm;# }#}# HTTPS server##server {# listen 443 ssl;# server_name localhost;# ssl_certificate cert.pem;# ssl_certificate_key cert.key;# ssl_session_cache shared:SSL:1m;# ssl_session_timeout 5m;# ssl_ciphers HIGH:!aNULL:!MD5;# ssl_prefer_server_ciphers on;# location / {# root html;# index index.html index.htm;# }#}}
ServerName匹配规则
1.我们可以在同一个ServerName中匹配多个域名写上面的会优先被匹配
2.完整匹配
3.通配符匹配
4.通配符结束匹配
5.正则匹配正则开始符~结束符$例子~^[0-9]\.mmban\.com$Nginx常用变量 $host: 请求的主机头
$remote_addr: 客户端IP地址
$remote_port: 客户端端口号
$remote_user: 已经经过Auth Basic Module验证的用户名
$http_referer: 请求引用地址
$http_user_agent: 客户端代理信息(UA)
$http_x_forwarded_for: 相当于网络访问路径
$body_bytes_sent: 页面传送的字节数
$time_local: 服务器时间
$request: 客户端请求
$request_uri: 请求的URI,带参数, 不包含主机名
$request_filename: 请求的文件路径
$request_method: 请求的方法如GET、POST
$args: 客户端请求中的参数
$query_string: 等同于$args, 客户端请求的参数
$nginx_version: 当前nginx版本
$status: 服务器响应状态码
$server_addr: 服务器地址
$server_port: 请求到达的服务器端口号
$server_protocol: 请求的协议版本
$content_type: HTTP请求信息里的Content-Type字段
$content_length: HTTP请求信息里的Content-Length字段
$uri: 请求中的当前URI(不带请求参数参数位于$args)
$document_root: 当前请求在root指令中指定的值
$document_uri: 与$uri相同Nginx反向代理
修改conf文件
worker_processes 1; #工作的进程个数events { #事件驱动模块worker_connections 1024; #一个work可以创建多少个连接
}http {include mime.types; #引入一个子配置文件mime.types记录返回的数据是什么类型的文件数据default_type application/octet-stream; #默认文件数据类型sendfile on; #数据零拷贝keepalive_timeout 65; #保持连接超时的时间server { #虚拟主机 vhostlisten 80; #监听的端口号server_name localhost; #主机名也可以配置域名location / { #URI域名之后的路径proxy_pass http://www.zhangyongjian.top;#代理到这个地址上}error_page 500 502 503 504 /50x.html; # 错误重定向URIlocation /50x.html {root html; }}}proxy_pass 如果配置的是http://zhangyongjian.top会发生网页的重定向地址栏会变成www.zhangyongjian.top。proxy_pass不支持https
proxy_pass的不同处理方式
proxy_pass http://localhost:8080和proxy_pass http://localhost:8080/(多了末尾的/)是不同的的处理方式而proxy_pass http://localhost:8080/和proxy_pass http://localhost:8080/abc是相同的处理方式。
对于不带URI方式nginx将会保留location中路径部分
对于带URI方式nginx将使用诸如alias的替换方式对URL进行替换并且这种替换只是字面上的替换 location /api2/ {proxy_pass http://localhost:8080/;}
#当访问 http://localhost/api2/xxx 时http://localhost/api2/注意最后的/
#被替换成了http://localhost:8080/然后再加上剩下的xxx于是变成http://localhost:8080/xxx。server{listen 80;server_name localhost;location /api1/{proxy_pass http://localhost:8080;}#http://localhost/api1/xxx-http://localhost:8080/api1/xxxlocation /api2{proxy_pass http://localhost:8080;}#http://localhost/api2/xxx-http://localhost:8080/api2/xxxlocation /api3/{proxy_pass http://localhost:8080/;}#http://localhost/api3/xxx-http://localhost:8080/xxxlocation /api4{proxy_pass http://localhost:8080/}#http://localhost/api4/xxx-http://localhost:8080//xxx
location /api5/ {proxy_pass http://localhost:8080/haha;}# http://localhost/api5/xxx - http://localhost:8080/hahaxxx#请注意这里的haha和xxx之间没有斜杠分析一下原因。location /api6/ {proxy_pass http://localhost:8080/haha/;}# http://localhost/api6/xxx - http://localhost:8080/haha/xxxlocation /api7 {proxy_pass http://localhost:8080/haha;}# http://localhost/api7/xxx - http://localhost:8080/haha/xxxlocation /api8 {proxy_pass http://localhost:8080/haha/;}# http://localhost/api8/xxx - http://localhost:8080/haha//xxx请注意这里的双斜杠。负载均衡
在一台主机上该nginx.conf
worker_processes 1; #工作的进程个数events { #事件驱动模块worker_connections 1024; #一个work可以创建多少个连接
}http {include mime.types; #引入一个子配置文件mime.types记录返回的数据是什么类型的文件数据default_type application/octet-stream; #默认文件数据类型sendfile on; #数据零拷贝keepalive_timeout 65; #保持连接超时的时间upstream httpds{ #定义一个服务器组server 192.168.44.102:80 weight8 down; #weight 访问权重down是下线不负载到这台机器server 192.168.44.103:80 weight2 backup; #weight 访问权重 backup 没有主机可以用时再负载到这台主机}server { #虚拟主机 vhostlisten 80; #监听的端口号server_name localhost; #主机名也可以配置域名location / { #URI域名之后的路径proxy_pass http://httpd;#负载均衡到这个服务器组中}error_page 500 502 503 504 /50x.html; # 错误重定向URIlocation /50x.html {root html; }}}轮询的方式来进行负责均衡无法保持会话也就是说登陆之后访问另外一个服务器就获取不到登陆信息
ip_hash根据来源的ip地址hash计算重定向到一台服务器不太会用 upstream myserver{ip_hash;server 127.0.0.1:8081;server 127.0.0.1:8082;
}
least_conn根据用户访问的url定向访问请求不太会用
fair根据后端服务器响应时间转发请求响应时间短的优先分配 upstream myserver{server 127.0.0.1:8081;server 127.0.0.1:8082;fair;
}所谓四层负载均衡指的是OSI七层模型中的传输层主要是基于IPPORT的负载均衡
实现四层负载均衡的方式
硬件F5、BIG-IP、Radware等
软件LV2、Nginx、Hayproxy等所谓七层负载均衡指的是在应用层主要是基于虚拟的URL或主机的负载均衡
实现七层负载均衡的方式
软件Nginx、Hayproxy等四层和七层负载均衡的区别
1.四层负载均衡数据包是在底层就进行了分发而七层负载均衡数据包则在最顶端进行分发所以四层负载均衡的效
率比七层负载均衡的要高
2.四层负载均衡不识别域名而七层负载均衡识别域名。 Nginx七层负载均衡的指令
upstream指令该指令是用来定义一组服务器它们可以是监听不同端口的服务器并且也可以是同时监听TCP和Unix socket的服务器。服务器可以指定不同的权重默认为1
server指令该指令用来指定后端服务器的名称和一些参数可以使用域名、IP、端口或者Unix socket
nginx动静分离 动静分离就是把后端服务需要使用到的静态资源前置放到nginx代理中
location /css {
root css;
index index.html index.htm;
}
location /js{
root js;
index index.html index.htm;
}
location /img{
root img;
index index.html index.htm;
}正则方式
location ~*/(js|img|css){
alias html;
#alias和root的区别
#root的处理结果是root路径location路径
#alias的处理结果是使用alias路径替换location路径
autoindex on; #列出访问目录
}URLRewrite
location /j{rewrite ^/([0-9]).html$ /index.jsp?pageNum$1 break; #把*.html地址转变为/index。jsp?pageNum*#flag标记说明#last 本条规则匹配完成后继续向下匹配新的location URI规则#break 本条规则匹配完成即终止不再匹配后面的任何规则#redirect 返回302临时重定向浏览器地址会显示跳转后的URL地址#permanent 返回301永久重定向浏览器地址会显示跳转后的URL地址proxy_pass: http://192.168.44.104:8080;
}防盗链 valid_referers 192.168.44.101; #检测referers
if($invalid_referer){ #检测完是无效的引用return 403;
}
location ~*/(js|img|css){
root html;
index index.html index.htm;
}nginx高可用配置
keepalived检测对方nginx是否存活 安装keepalived
yum install -y keepalivedvi /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs { #全局配置router id lb111 #标识主机
}vrrp_instance atguigu { #实例名称state MASTER #当前这台主机是MASTERinterface ens33 #网卡名称virtual_router_id 51 #标识keepalived组priority 100 #竞选master时的优先级谁的优先级高谁是masteradvert_int 1 #间隔检测的时间authentication { #nginx组配对认证的相关配置auth type PASSauth pass 1111}virtual ipaddress ( #虚拟的ip地址可以填多个192.168.200.16192.168.200.17192.168.200.18}
}keepalived启动
cd /usr/local/sbin/
./keepalivedVRRP (Virtual Route Redundancy Protocol) 协议翻译过来为虚拟路由冗余协议。VRRP协议将两台或多台路由器设备虚拟成一个设备对外提供虚拟路由器IP而在路由器组内部如果实际拥有这个对外IP的路由器如果工作正常的话就是MASTERMASTER实现针对虚拟路由器IP的各种网络功能。其他设备不拥有该虚拟IP状态为BACKUP除了接收MASTER的VRRP状态通告信息以外不执行对外的网络功能。当主机失效时BACKUP将接管原先MASTER的网络功能。
这个协议是干什么的
1.选择协议虚拟一个IP选择节点成为MASTER
2.路由容错协议Master和Backup路由会有心跳检测Master会定时告知Backup自己的状态如果指定时间内
Backup没有接收到这个通知内容Backup就会替代Master成为新的Master。keepalived之vrrp_script
keepalived只能做到对网络故障和keepalived本身的监控即当出现网络故障或者keepalived本身出现问题时进行切换。但是这些还不够我们还需要监控keepalived所在服务器上的其他业务比如Nginx,如果Nginx出现异常了仅仅keepalived保持正常是无法完成系统的正常工作的因此需要根据业务进程的运行状态决定是否需要进行主备切换这个时候我们可以通过编写脚本对业务进程进行检测监控。
实现步骤
1.在keepalived配置文件中添加对应的配置项
vrrp_script 脚本名称
{script 脚本位置interval 3 #执行时间间隔weight -20 #动态调整vrrp_instance的优先级
}2.编写脚本 ck_nginx.sh 3.为脚本文件设置权限
sudo chmod安全性
https的安全性保障 https升级过程
1.向CA申请证书
2.将证书上传到服务器
3.证书安装
server{listen 443 ssl;server_name aa.abc.com;ssl_certificate /data/cert/server.crt;ssl_certificate_key /data/cert/server.key;
}4.重启nginx
Nginx限流
Nginx限流就是限制用户请求速度防止服务器受不了限流有3种
1.正常限制访问频率正常变量
2.突发限制访问频率突发流量
3.限制并发连接数Nginx的限流是基于两个模块
1.漏桶算法实现的请求限流模块ngx_http_limit_req_module控制速率
2.连接数限流模块ngx_http_limit_conn_module控制并发数1.正常限制访问频率限制一个用户发送的请求我Nginx多久接收一个请求。Nginx中使用nginx_limit_req_module模块来限制访问频率限流的原理实质是基于漏桶算法原理来实现的。在nginx.conf配置文件中可以使用limit_req_zone命令及limit_req命令限制单个IP的请求处理频率
#定义限流维度一个用户一分钟一个请求进来多余的全部漏掉
limit_req_zone $binary_remote_addr zoneone:10m rate1r/m;#$binary_remote_addr是一种key表示基于remote_addr客户端IP来做限流binary_的目的是压缩
#内存占用量。
#zone定义共享内存区来存储访问信息contentRateLimit10m表示一个大小为10M名字为
#contentRateLimit的内存区域。1M能存储16000 IP地址的访问信息10M可以存储16W IP地址访问信息
#rate用于设置最大访问速率rate10r/s表示每秒最多处理10个请求。Nginx实际上以毫秒为粒度来跟踪
#请求信息因此10r/s实际上是限制每100毫秒处理一个请求。这意味着自上一个请求处理完后若后续100毫秒内又有请求到达将拒绝处理该请求。
#所以如果10次请求同时到达那么只有一个请求能够得到执行其它的都会被拒绝
#这不太友好大部分业务场景下我们希望10个请求都能得到执行
#因此可以配置burst
#绑定限流维度
server{location /seckill.html{limit_req zoneone;proxy_pass http://lj_seckill;}
}1r/s代表1秒一个请求1r/m一分钟接收一个请求如果Nginx这时还有别人的请求没有处理完Nginx就会拒绝处理该用户请求。
2.突发限制访问频率突发流量 限制一个用户发送的请求我Nginx多久接收一个。 上面的配置一定程度可以限制访问频率但是也存在着一个问题如果突发流量超出请求被拒绝处理无法处理活动时候的突发流量这时候应该如何进一步处理呢 Nginx提供burst参数结合nodelay参数可以解决流量突发的问题可以设置能处理的超过设置的请求数外能额外处理的请求数。我们可以将之前的例子添加burst参数以及nodelay参数 #定义限流维度一个用户一分钟一个请求进来多余的全部漏掉
limit_req_zone $binary_remote_addr zoneone:10m rate1r/m;
#绑定限流维度
server{location/seckill.html{limit_req zonezone burst5 nodelay;proxy_pass http://lj_seckill;}
}burst5 nodelay代表Nginx对于一个用户的请求会立即处理前五个多余的就慢慢来落没有其他用户的请求我就处理你的有其他的请求的话我Nginx就漏掉不接受你的请求
限制并发连接数 Nginx中的ngx_http_limit_conn_module模块提供了限制并发连接数的功能可以使用limit_conn_zone指令以及limit_conn执行进行配置。 http {limit_conn_zone $binary_remote_addr zonemyip:10m;limit_conn_zone $server_name zonemyServerName:10m;
}
server {location / {limit_conn myip 10;limit_conn myServerName 100;rewrite / http://www.lijie.net permanent;}
}
上面配置了单个IP同时并发连接数最多只能10个连接并且设置了整个虚拟服务器同时最大并发数最多只能100个链接。当然只有当请求的header被服务器处理后虚拟服务器的连接数才会计数。
Nginx缓存集成
Nginx是从0.7.48版开始提供缓存功能。Nginx是基于Proxy Store来实现的其原理是把URL及相关组合当做Key在使用MD5算法对Key进行哈希得到硬盘上对应的哈希目录路径从而将缓存内容保存在该目录中。它可以支持任意URL连接同时也支持404/301/302这样的非200状态码。Nginx即可以支持对指定URL或者状态码设置过期时间也可以使用purge命令来手动清除指定URL的缓存。 Nginx缓存设置的相关指令
Nginx的web缓存服务主要是使用ngx_http_proxy_module模块相关指令集来完成接下来我们把常用的指令来进行介绍下。
proxy_cache_path该指定用于设置缓存文件的存放路径。
levels:指定该缓存空间对应的目录层数最多可以设置3层每层取值为1|2 keys_zone:用来为这个缓存区设置名称和指定大小 inactive:指定缓存的数据多次时间未被访问就将被删除 max_size:设置最大缓存空间如果缓存空间存满默认会覆盖缓存时间最长的资源
http{proxy_cache_path /usr/local/proxy_cache levels2:1 keys_zoneitcast:200m inactive1d max_size20g;
}proxy_cache该指令用来开启或关闭代理缓存如果是开启则自定义使用哪个缓存区来进行缓存 zone_name指定使用缓存区的名称 proxy_cache_key该指令用来设置web缓存的key值Nginx会根据key值MD5哈希存缓存 proxy_cache_valid:使用该指令用来对不同状态码的URL设置不同的缓存时间
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
#为200和302的响应URL设置10分钟缓存为404的响应URL设置1分钟缓存
proxy_cache_valid any lm;
#对所有响应状态码的URL都设置1分钟缓存proxy_cache_min_uses该命令用来设置资源被访问多少次后被缓存 proxy_cache_min_uses:该指令用来设置资源被访问多少次后被缓存 proxy_cache_methods该指令用户设置缓存哪些HTTP方法 默认缓存HTTP的GET和HEAD方法不缓存POST方法
http{proxy_cache_path /usr/local/proxy_cache levels2:1 keys_zoneitcast:200m inactive1d max_size20g;location /{proxy_cache $scheme$proxy_hosts$request_uri;proxy_cache_key itheima;proxy_cache_valid 200 5d;proxy_cahche_valid any 1m;proxy_cache_min_uses 5;proxy_pass 127.0.0.1:8080/js/;}
}proxy_no_cache该指令是用来定义不将数据进行缓存的条件
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;proxy_cache_bypass该指令用来设置不从缓存中获取数据的条件
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;上述两指令都有一个指定的条件这个条件可以是多个并且多个条件中至少有一个不为空且不等于0”,则条件满足成立。上面给的配置实例是从官方网站获取的里面使用到了三个变量分别是 c o o k i e n o c a c h e 、 cookie_nocache、 cookienocache、arg_nocache、$arg_comment
$cookie_nocache
指的是当前请求的cookie中键的名称为nocache对应的值
$arg_nocache和$arg_comment
指的是当前请求的参数中属性名为nocache和comment对应的属性值http{log_format main $schemes$proxy_hosts$request_uri;log_format params $cookie_nocache|$arg_nocache|$arg_comment;upstream backend {server 192.168.200.146:8080;}server {listen 8081;server_name localhost; location / {access_log logs/access_params.log params; #打印的日志文件和日志格式root html;index index.html;}
}Lua脚本
lua的安装
1.下载源码压缩包
wget https://www.lua.org/ftp/lua-5.4.1.tart.gz2.安装lua
cd lua-5.4.1
make linux test
make installLua的语法
Lua有两种交互方式交互式和脚本式
Lua交互式编程模式可以通过命令lua -i或lua来启用
第一个lua脚本
#!/usr/local/bin/lua
print(hello world!!!)注释符
– 单行注释
–[[ 多行注释 –]]
lua关键字 lua的8个数据类型
类型字段类型名称nil空无效值boolean布尔值true/falsenumber数值string字符串function函数table表thread线程userdata用户数据
可以通过type函数获取变量类型
字符串的定义中用[[]]代替··
{}代表表也可以创建数组
--定义数组
arr{TOM,JERRY,ROSE}
--数组下标从1开始
arr{}
arr[X]10
arr[Y]20
--arr[X]和arr.X都能获取到function函数定义
function functionName(params)endfunction add(a,b)
print(a,b)
endfunction add(...)
local a,b,c...
print(a,b,c)
endLua控制结构
if条件判断
function testif(a)if a0 thenprint(正数)return 正数elseif a0 thenprint(0)return 0elseprint(负数)return 负数end
endwhile循环
function testwhile()while true doprint(hello world!)end
endrepeat循环
function testRepeat()local i10repeatprint(i)ii-1until i1
endfor循环数值型for循环和泛型for循环
--数值型for循环
function testfor()for i 0,100,10 do --从0开始到100步长为10默认步长是1print(i)end
end--泛型for循环
function testfor2(x)for i,v in ipairs(x) doprint(i,v)end
endOpenRestry
前面我们提到过openResty是由淘宝工程师开发的所以其官方网站(http://openresty.org/)我们读起来是非常的方便。OpenResty是一个基于Nginx与 Lua的高性能 Web平台其内部集成了大量精良的Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。所以本身OpenResty内部就已经集成了Nginx和Lua所以我们使用起来会更加方便。
OpenRestry的安装
(1)下载openResty: https://openresty.org/download/openresty-1.15.8.2.tar.gz (2)使用wget下载: wget https://openresty.org/download/openresty-1.15.8.2.tar.gz (3)解压缩: tar -zxf openresty-1.15.8.2.tar.gz (4)进入openResty目录: cd openresty-1.15.8.2 (5)执行命令:./configure (6)执行命令:make make install (7)进入openResty的目录找到nginx:cd /usr/local/openresty/nginx/ (8)在conf目录下的nginx.conf添加如下内容
location /lua{
default_type text/html
content_by_lua ngx.say(h1HELLO,OpenRestry/h1)
}(9)在openresty的sbin目录下启动nginx (10)通过浏览器访问测试 location /getByGender{default_type text/html;set_by_lua $param --获取URL上的参数对应的值 name genderlocal uri_argsngx.req.get_uri_args()local nameuri_args[name]local genderuri_args[gender]--条件判断 if gender 1 先生 0 女士if gender1 thenreturn name..先生else if gender0 thenreturn name..女士elsereturn nameend;return 200 $param;}