nginx常用场景
1、浏览器缓存
server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_server_access.log; error_log /var/log/nginx/static_server_error.log; location ~ .*\.(html|htm) { expires 24h;(缓存过期时间) root /Data/work/picture; } }
2、跨站访问
server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_server_access.log; error_log /var/log/nginx/static_server_error.log; location ~ .*\.(html|htm) { add_header Access-Control-Allow-Origin http://www.jesonc.com;(允许某个站点进行跨站访问) add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;(允许进行跨站访问的http请求方法) root /Data/work/picture; } }
(1)概念
防止资源被盗用
(2)防盗链设置思路
首要方式:区别哪些请求是非正常的用户请求(阻止非正常用户经常访问,保证正常用户正常访问)
(3)基于http_refer防盗链配置模块
Syntax:valid_referers none|blocked|server_names|string...;
Default:--
Context:server,loation
valid_referers:允许哪些referer信息访问
none:允许没有带referer信息的访问
blocked:允许非http://domain样式的请求访问
server_names:只允许ip的方式访问
server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_server_access.log; error_log /var/log/nginx/static_server_error.log; location ~ .*\.(jpg|gif|png)$ { valid_referers none blocked 192.168.126.137; if ($invalid_referer) { return 403; } root /Data/work/picture; } }
(4)测试防盗链
不予许访问的地址,如百度,返回403错误码
curl -e "http://www.baidu.com" -I http://ip:8083/1.jpg
允许访问的地址,返回200成功码
curl -e "http://192.168.126.137" -I http://ip:8083/1.jpg
4、代理服务
(1)原理
代理--代为办理(代理理财,代理收获等等)
(2)代理分类
按应用场景模式总结
<1>正向代理(客户端通过代理服务器访问网站,如访问谷歌,客户端请求代理服务器由代理服务器去访问谷歌,客户端不需要访问谷歌)
<2>反向代理(服务端用来均衡流量等作用)
(3)代理区别
区别在于形式上服务的对象不一样
正向代理代理的对象是客户端,为客户端服务
反向代理代理的对象是服务端,为服务端服务
(4)配置语法
Syntax:proxy_pass URL;
Default:--
Context:location,if in location, limit_except
<1>反向代理
server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_server_access.log; error_log /var/log/nginx/static_server_error.log; location ~ /test_proxy.html$ { proxy_pass http://192.168.126.137:8082; } }
(5)代理补充配置和规范
server { listen 8083; server_name 127.0.0.1; sendfile on; access_log /var/log/nginx/static_server_access.log; error_log /var/log/nginx/static_server_error.log; location / { proxy_pass http://192.168.126.137:8090; proxy_redirect default;(重定向) proxy_set_header Host $http_host;(nginx代理往后端server发送信息的时候所添加的头信息,常常会添加的为Host头信息) proxy_set_header X-Real-IP $remote_addr;(获取前端的真实ip地址) proxy_connect_timeout 30s;(连接请求的超时时间) proxy_send_timeout 60s;(发送数据超时时间) proxy_read_timeout 60s;(读取数据超时时间) proxy_buffer_size 32k;(nginx默认缓冲区的内存大小) proxy_buffering on;(尽可能的读取缓冲区中后端响应信息,一次传递所有信息给前端,减少IO损耗) proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k;(当缓存区已满时,将数据存到临时文件中,设置临时文件的大小) } }
5、nginx作为缓存服务
(1)缓存类型
<1>如果缓存放到服务端,称为服务端缓存(redis,memcahce)
<2>如果缓存放到代理或者中间件上,称为代理缓存(从服务端获取到数据后,先缓存到本地一份,再返回给客户端使用)
<3>如果缓存放到客户端,称为客户端缓存(缓存到浏览器上)
(2)proxy_cache配置语法
Syntax:proxy_cache_path path[levels=levels] [use_temp_path=on|off] keys_zone=name:size[inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
Default:--
Context:http
定义好path后
Syntax:proxy_cache zone|off;
Default:proxy_cache off;
Context:http,server,location
缓存过期周期
Syntax:proxy_cache_valid [code...] time;
Default:--
Context:http,server,location
缓存的维度
Syntax:proxy_cache_key string;
Default:proxy_cache_key $scheme$proxy_host$request_uri
Context:http,server,location
upstream tcache { server 192.168.126.137:8090; server 192.168.126.137:8081; server 192.168.126.137:8082; } proxy_cache_path /opt/app/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 8084; server_name 127.0.0.1; access_log /var/log/nginx/test_proxy_access.log main; location / { proxy_cache test_cache; proxy_pass http://tcache; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache $upstream_cache_status; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;(如果代理的服务器出现500,502,503,504错误时就默认跳过,访问下一台服务器) } }
(3)补充-如何清理指定缓存
方式一:rm -rf 缓存目录内容
方式二:第三方扩展模块ngx_cache_purge
(4)补充-如何让部分页面不缓存
Syntax:proxy_no_cache string ...;
Default:--
Context:http,server,location
upstream tcache { server 192.168.126.129:8081;}proxy_cache_path /opt/app/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off;server { listen 8084; server_name 127.0.0.1; access_log /var/log/nginx/test_proxy_access.log main; if ($request_uri ~ ^/(url|login|register|password\/reset)) { set $cookie_nocache 1; } (判断请求是否以不能缓存的uri路径开头,如果是则将cookie_nocache设置为1) location ~ .*\.(jpg|png|gif) { proxy_cache test_cache; proxy_pass http://tcache; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; proxy_no_cache $cookie_nocache $arg_noache $arg_comment;(cookie_nocache不为0或者空,这不能缓存) proxy_no_cache $http_pragma $http_authorization; add_header Nginx-Cache $upstream_cache_status; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } location ~ .*\.(html|htm){ root /Data/work/picture; index index.html index.htm; }}
6、缓存命中分析
(1)方式一:通过设置response的头信息Nginx-Cache
add_header Nginx-Cache "$upstream_cache_status";
$upstream_cache_status
状态 | 意义 |
MISS | 未命中,请求被传送到后台处理 |
HIT | 缓存命中 |
EXPIRED | 缓存已经过期,请求被传送到后台处理 |
UPDAING | 正在更新缓存,将使用旧的应答 |
STALE | 后端得到过期的应答 |
(2)方式二:通过设置log_format,打印日志分析
缓存命中率 = HIT次数/总请求数
实现方式:分析Nginx里的Access日志
awk命令使用(分析命中率)
awk '{if($NF=="\"HIT\""){hit++}}END{printf "%.2f",hit/NR}' /var/log/nginx/test_proxy_access.log(红色为可变量,蓝色为自定义量)
7、负载均衡
(1)配置语法
Syntax:upstream name {...}
Default:--
Context:http
upstream test { server 192.168.126.137:8081; server 192.168.126.137:8090; server 192.168.126.137:8091; } server { listen 8086; server_name 127.0.0.1; charset UTF-8; access_log /var/log/nginx/test_proxy_access.log main; error_log /var/log/nginx/test_proxy_error.log; location / { proxy_pass http://test; proxy_redirect default; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffer_size 32k; proxy_buffering on; proxy_buffers 4 128k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 256k; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
nginx常用场景的更多相关文章
- nginx应用场景,特性,目录结构,常用模块,内置变量,URL和URI,http状态码,配置文件详解
1.nginx介绍 1丶俄罗斯人开发的,开源www服务软件 2丶软件一共780K 3丶nginx本身是一款静态(html,js,css,jpg等)www软件 4丶静态小文件高并发,同时占用的资源很少, ...
- 【第六课】Nginx常用配置下详解
目录 Nginx常用配置下详解 1.Nginx虚拟主机 2.部署wordpress开源博客 3.部署discuz开源论坛 4.域名重定向 5.Nginx用户认证 6.Nginx访问日志配置 7.Ngi ...
- nginx的重试机制以及nginx常用的超时配置说明
nginx的重试机制 现在对外服务的网站,很少只使用一个服务节点,而是部署多台服务器,上层通过一定机制保证容错和负载均衡. nginx就是常用的一种HTTP和反向代理服务器,支持容错和负载均衡. ng ...
- nginx常用模块(三)
Nginx常用模块(三) ngx_http_proxy_module模块配置(http或https协议代理) proxy_pass URL; 应用上下文:location, if in locatio ...
- 针对nginx应用场景的配置 知识整理
本文为转载,原文链接 前言 原本想写整理一篇针对nginx应用场景的相应配置,但发现已经有人整理了,而且写得非常不错,特意转过来 概论 Nginx 是一款面向性能设计的 HTTP 服务器,能反向代理 ...
- Nginx 常用基础模块
目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...
- Nginx常用功能配置一
Nginx常用功能配置 参数include配置 说明:如果日常工作中server标签存在太多,可以采用include配置模式,Nginx的主配置文件包含的所有虚拟主机的子配置文件会统一放入extra目 ...
- 第十章 nginx常用配置介绍
一.虚拟主机 1.配置方式 #虚拟主机配置方式:1.基于多IP的方式2.基于多端口的方式3.基于多域名的方式 2.方式一:基于多IP的方式 1.第一个配置文件[root@web02 /etc/ngin ...
- Nginx 常用全局变量 及Rewrite规则详解
每次都很容易忘记Nginx的变量,下面列出来了一些常用 $remote_addr //获取客户端ip $binary_remote_addr //客户端ip(二进制) $remote_port //客 ...
随机推荐
- 使用myeclipse修改项目映射路径
这里主要做下记录,找到myeclipse中对项目路径进行查看以及修改的地址 如图 点击项目右键 实例url:http://localhost:8080/myFirstServlet/one 对应路径中 ...
- 基于geoserver的REST服务完成mysql数据源动态发布
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 在之前的<简析GeoServer服务的内部文件组织以及 ...
- Process 'command 'D:\jdk8\jdk\bin\java.exe'' finished with non-zero exit value 2
转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10539006.html 捣鼓了好久,现在已经不想说话,为何会出现这个问题,Process 'comman ...
- Git使用详细教程(9):git log
目录 格式化 检索 显示最近提交 Git中使用git log查看提交日志 如果日志很多的话,默认会以分页方式展示 空格可以翻下一页,ctrl+b翻上一页,q退出 格式化 如果想获取每条日志的简要信息, ...
- cmd 执行Dcpromo错误:在该 SKU 上不支持 Active Directory 域服务安装向导,Windows Server 2008 R2 Enterprise 配置AD(Active Directory)域控制器
今天,要安装AD域控制器,运行dcpromo结果提示:在该 SKU 上不支持 Active Directory 域服务安装向导. 以前弄的时候直接就通过了,这次咋回事?终于搞了大半天搞定了. 主要原因 ...
- JVM之GC算法、垃圾收集算法——标记-清除算法、复制算法、标记-整理算法、分代收集算法
标记-清除算法 此垃圾收集算法分为“标记”和“清除”两个阶段: 首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记对象,它的标记过程前面已经说过——如何判断对象是否存活/死去 死去的对象就会 ...
- HTML5 input date属性引起的探索——My97DatePicker(日期选择插件)
不得不说H5的input date属性真的好用,之前我写的http://www.cnblogs.com/tu-0718/p/6729274.html这篇博客里面也有提到,不过虽然移动端对H5的支持还是 ...
- 从壹开始前后端分离【 .NET Core2.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】
前言 关于JWT一共三篇 姊妹篇,内容分别从简单到复杂,一定要多看多想: 一.Swagger的使用 3.3 JWT权限验证[修改] 二.解决JWT权限验证过期问题 三.JWT完美实现权限与接口的动态分 ...
- 【TensorFlow篇】--反向传播
一.前述 反向自动求导是 TensorFlow 实现的方案,首先,它执行图的前向阶段,从输入到输出,去计算节点值,然后是反向阶段,从输出到输入去计算所有的偏导. 二.具体 1.举例 图是第二个阶段,在 ...
- mysql的学习笔记(三)
1.外键约束(保持数据一致,完整.实现一对多或一对一) 父表(参照的表)和子表(有外键列的表)必须使用相同的存储引擎InnoDB,禁止使用临时表. 外键列和参照列必须具有相似的数据类型.其中数字的长度 ...