Nginx与浏览器缓存的处理方法
- 格式:docx
- 大小:45.34 KB
- 文档页数:2
nginx配置详解⾼性能的http服务代理服务器和反向代理服务器,能⽀持50000个并发连接数正向代理明确买家是谁,让代理⼈去联系⽬标例如局域⽹内的客户端想要访问局域⽹外的internet,则需要代理服务器来访问,这种代理就是正向代理反向代理客户端不需要任何配置就可以访问,只需要将请求发送到代理服务器,有代理服务器去选择⽬标服务器在返回给客户端负载均衡将请求分发到不同服务器、负载分发到不同服务器,就是负载均衡访问⼀个ip 默认是80 (nginx) tomcat 是8080动静分离为了加快⽹站的解析速度、将动态和静态页⾯有不同服务器来解析,降低原来单个服务器的压⼒安装进⼊压缩⽬录执⾏./configure执⾏make && make install (编译安装)安装完成后多⼀个local/nginx 在nginx有sbin 启动脚本./nginx访问: ->welcome to nginx查看开放的端⼝:firewall-cmd –list-all添加端⼝:Firewall-cmd –add-service=http -permanentSudo firewall-cmd –add-port=80/tcp –permanent重启防⽕墙:firewall-cmd -reloadNginx 相关命令:1 进⼊到nginx的⽬录 /usr/local/nginx/sbin2 查看nginx的版本号:./nginx -v3 启动nginx ./nginx4 关闭nginx ./nginx -s stop5 重加载 ./nginx -s reload (重新加载配置⽂件 nginx.conf)Nginx的配置⽂件组成第⼀块:全局块从配置⽂件开始到events块之间的内容、主要设置⼀些影响nginx服务器运⾏的配置指令,⽐如 worker_process 1; 值越⼤,可以⽀持的并发量也越多第⼆部分:events涉及的指令主要影响nginx服务器与⽤户的⽹络连接数⽐如 worker connections 1024 ⽀持的最⼤连接数第三部分:http块(配置最多的地⽅)http全局块server块举例:浏览器访问Nginx.conf 配置如下图:proxy_pass 反向代理的地址例如:要实现http://127.0.0.1:9091/edu 访问tomcatl1 (127.0.0.1:8080)http://127.0.0.1:8080/vod 访问tomcatl2 (127.0.0.1:8081)注意:开放端⼝ 9091 8081 8080 (firewall)在 /usr/src/tomcat-xx/apache-tomcat-xx/webapps/ 创建 edu⽬录然后放⼀个a.html⽂件这时访问就能看到这是nginx.conf ⾥要改的内容~ /edu/ #正则表达式,请求路径包含 edu时就会转发到 xxx:8080关于location的说明:负载均衡:访问http://192.168.17.129/edu/a.htmlUpstream myserver{Server 192.168.17.129:8080;Server 192.168.17.129:8081;}策略:轮询(默认)、权重、ip_hash、fair(第三⽅)轮询:服务器如果down掉,⾃动剔除权重:weight 权重越⾼,分配的客户端越多Upstream myserver{Server xxx weight=1;Server xxx weight=10;}Ip_hash:每个访客固定⼀个后端服务器、可以解决session问题Upstream myserver{Ip_hash;Server xxx;Server xxx;}Fair:按后端服务器响应时间来分配请求、响应时间断的优先分配Upstream myserverr{Server xxxx;Server xxxx;Fair;}动静分离:Nginx处理静态页⾯、tomcat处理动态页⾯:⼀:把静态⽂件独⽴成单独的域名放在独⽴的服务器上另⼀种就是动态和静态⽂件混合⼀起发布,通过nginx来分开,通过location指定不同的后缀名实现不同的转发请求、通过expires 参数设置可以使浏览器缓存过期时间,减少与服务器之间的请求和流量;设定⼀个过期时间,也就是⽆需去后端服务验证,直接通过浏览器确认是否过期即可,不会残⽣额外的流量/data/image/01.jpg/data/www/a.htmlAutoinde on; // 列出返回⽬录最终测试:http://192.168.17.129/image/01.jpghttp://192.168.17.129/www/a.html⾼可⽤集群需要两台服务器 192.168.17.129 192.168.17.131 (nginx)这两台都要安装nignx、keepalivedYum -y install keepalived安装好之后修改/etc/keepalived/keepalived.conf ⽂件分别启动nignx和keepalived./nginx systemctl start keepalived.service补充:关闭nginx服务1 kill `cat /usr/local/nginx/logs/nginx.pid` //⽂件中有个pid号2 nginx -s reload //重载Session共享:⽆论登录那⼀台ip,session是⼀致的1 内存数据库(memcache)1 修改服务器和数据库的关联关系。
nginx 响应参数【1.Nginx 响应头概述】ginx 是一款高性能的反向代理服务器,广泛应用于Web 服务器和应用服务器。
在Nginx 处理请求时,响应头(Response Headers)是响应的重要组成部分,它包含了服务器传递给客户端的信息和设置。
恰当使用响应头参数,可以有效提升网站性能、保护服务器资源和提升用户体验。
【2.Nginx 响应头常用参数介绍】1.Content-Type:设置响应内容的类型,如text/html、application/json 等。
2.Content-Length:设置响应内容的长度,便于客户端提前知道数据大小,如:Content-Length: 1234。
st-Modified:设置文件最后修改时间,用于缓存控制,如:Last-Modified: Wed, 1 Jan 2000 00:00:00 GMT。
4.ETag:设置资源版本,与If-None-Match 共同实现缓存控制。
5.Cache-Control:设置缓存控制策略,如:Cache-Control: no-cache, no-store, must-revalidate。
6.Expires:设置响应过期的日期和时间,如:Expires: Wed, 1 Jan 2000 00:00:00 GMT。
7.Server:设置服务器类型和版本,如:Server: nginx/1.21.0。
8.Connection:设置客户端与服务器之间的连接参数,如:Connection: keep-alive。
9.Keep-Alive:设置长连接是否开启,如:Keep-Alive: on。
10.Transfer-Encoding:设置传输编码,如:Transfer-Encoding: chunked。
【3.响应头参数的应用场景及示例】1.设置内容类型:当客户端请求的资源为HTML 页面时,响应头Content-Type 设置为text/html,以确保浏览器正确渲染页面。
Nginx下关于缓存控制字段cache-control的配置说明-运维⼩结HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。
在请求消息或响应消息中设置 Cache-Control并不会影响另⼀个消息处理过程中的缓存处理过程。
请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
下⾯做⼀详细总结, ⽅便在以后的运维⼯作中理解和运⽤.⼀. 浏览器中关于Cache的3属性:1. Cache-Control:设置相对过期时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存⼀次, 可以设置max-age的值为315360000000 (⼀万年). ⽐如对于提交的订单,为了防⽌浏览器回退重新提交,可以使⽤Cache-Control之no-store绝对禁⽌缓存,即便浏览器回退依然请求的是服务器,进⽽判断订单的状态给出相应的提⽰信息!Http协议的cache-control的常见取值及其组合释义:no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.no-store: 不仅不能缓存, 连暂存也不可以(即: 临时⽂件夹中不能暂存该资源).private(默认): 只能在浏览器中缓存, 只有在第⼀次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.max-age: 相对过期时间, 即以秒为单位的缓存时间.no-cache, private: 打开新窗⼝时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.- private, 正数的max-age: 后退时候不会访问服务器.- no-cache, 正数的max-age: 后退时会访问服务器.2. Expires:设置以分钟为单位的绝对过期时间, 优先级⽐Cache-Control低, 同时设置Expires和Cache-Control则后者⽣效. 也就是说要注意⼀点: Cache-Control的优先级⾼于Expiresexpires起到控制页⾯缓存的作⽤,合理配置expires可以减少很多服务器的请求, expires的配置可以在http段中或者server段中或者location段中. ⽐如控制图⽚等过期时间为30天, 可以配置如下:location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ {root /var/www/img/;expires 30d;}再⽐如:location ~ \.(wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {root /var/www/upload/;expires max;}3. Last-Modified:该资源的最后修改时间, 在浏览器下⼀次请求资源时, 浏览器将先发送⼀个请求到服务器上, 并附上If-Unmodified-Since头来说明浏览器所缓存资源的最后修改时间, 如果服务器发现没有修改, 则直接返回304(Not Modified)回应信息给浏览器(内容很少), 如果服务器对⽐时间发现修改了, 则照常返回所请求的资源.需要注意:1) Last-Modified属性通常和Expires或Cache-Control属性配合使⽤, 因为即使浏览器设置缓存, 当⽤户点击”刷新”按钮时, 浏览器会忽略缓存继续向服务器发送请求, 这时Last-Modified将能够很好的减⼩回应开销.2) ETag将返回给浏览器⼀个资源ID, 如果有了新版本则正常发送并附上新ID, 否则返回304,但是在服务器集群情况下, 每个服务器将返回不同的ID, 因此不建议使⽤ETag.以上描述的客户端浏览器缓存是指存储位置在客户端浏览器, 但是对客户端浏览器缓存的实际设置⼯作是在服务器上的资源中完成的. 虽然上⾯介绍了有关于客户端浏览器缓存的属性, 但是实际上对这些属性的设置⼯作都需要在服务器的资源中做设置. 通常有两种操作⼿段对浏览器缓存进⾏设置, ⼀个是通过页⾯指令声明来设置, 另外⼀个是通过编程⽅式来设置.下⾯是相关页⾯设置Cache-Control头信息的⼏个简单配置:例⼀:if ($request_uri ~* "^/$|^/search/.+/|^/company/.+/") {add_header Cache-Control max-age=3600;}个⼈理解的max-age意思是:客户端本地的缓存,在配置的⽣存时间内的,客户端可以直接使⽤,超出⽣存时间的,到服务器上取新数据。
nginx缓存配置及开启gzip压缩阅读⽬录⼀:nginx缓存配置在前⼀篇⽂章,我们理解过http缓存相关的知识点, 请看. 今天我们来学习下使⽤nginx服务来配置缓存的相关的知识。
nginx配置缓存的优点:可以在⼀定程度上,减少服务器的处理请求压⼒。
⽐如对⼀些图⽚,css或js做⼀些缓存,那么在每次刷新浏览器的时候,就不会重新请求了,⽽是从缓存⾥⾯读取。
这样就可以减轻服务器的压⼒。
nginx可配置的缓存⼜有2种:1)客户端的缓存(⼀般指浏览器的缓存)。
2)服务端的缓存(使⽤proxy-cache实现的)。
客户端的缓存⼀般有如下两种⽅式实现:协商缓存和强缓存。
具体理解什么是协商缓存或强缓存,可以看我之前的.在配置之前,我们来看下我们的项⽬基本架构如下:|----项⽬demo| |--- .babelrc # 解决es6语法问题| |--- node_modules # 所有依赖的包| |--- static| | |--- index.html # html页⾯| | |--- css # 存放css⽂件夹| | | |--- base.css # css⽂件,是从⽹上随便复制过来的很多css的| | |--- js # 存放js的⽂件夹| | | |--- jquery-1.11.3.js # jquery ⽂件| | |--- images # 存放images⽂件夹| | | |-- 1.jpg # 图⽚对应的⽂件| |--- app.js # 编写node相关的⼊⼝⽂件| |--- package.json # 依赖的包⽂件package.json 代码如下:{"name": "xxx","version": "1.0.0","description": "","main": "index.js","scripts": {"dev": "nodemon ./index.js"},"license": "MIT","devDependencies": {},"dependencies": {"@babel/core": "^7.2.2","@babel/preset-env": "^7.2.3","@babel/register": "^7.0.0","koa": "^2.7.0","koa-static": "^5.0.0","nodemon": "^1.19.0","path": "^0.12.7"}}app.js 代码如下:import path from 'path';import Koa from 'koa';//静态资源中间件import resource from 'koa-static';const app = new Koa();const host = 'localhost';const port = 7878;e(resource(path.join(__dirname, './static')));app.listen(port, () => {console.log(`server is listen in ${host}:${port}`);});index.js 代码如下:require('@babel/register');require('./app.js');index.html 代码如下:<!DOCTYPE HTML><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>前端缓存</title><style>.web-cache img {display: block;width: 100%;}</style><link href="./css/base.css" rel="stylesheet"/><script type="text/javascript" src="./js/jquery-1.11.3.js"></script></head><body><div class="web-cache">1111112224546664456999000<img src="./images/1.jpg"/></div></body></html>如上就是⼀些基本的代码结构,当我们在nginx没有配置任何的时候,我们直接在命令⾏中运⾏ npm run dev 的时候,然后我们在浏览器访问 http://localhost:7878/ 时候,可以看到不管我刷新多少次,浏览器下图⽚,css,js所有的请求都会返回200,不会有任何缓存。
Nginx性能优化有这篇就够了!⽬录:1、Nginx运⾏⼯作进程数量Nginx运⾏⼯作进程个数⼀般设置CPU的核⼼或者核⼼数x2。
如果不了解cpu的核数,可以top命令之后按1看出来,也可以查看/proc/cpuinfo ⽂件 grep ^processor /proc/cpuinfo | wc -l[root@lx~]# vi/usr/local/nginx1.10/conf/nginx.confworker_processes 4;[root@lx~]# /usr/local/nginx1.10/sbin/nginx-s reload[root@lx~]# ps -aux | grep nginx |grep -v greproot 9834 0.0 0.0 47556 1948 ? Ss 22:36 0:00 nginx: master processnginxwww 10135 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker processwww 10136 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker processwww 10137 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker processwww 10138 0.0 0.0 50088 2004 ? S 22:58 0:00 nginx: worker process2、Nginx运⾏CPU亲和⼒⽐如4核配置:worker_processes 4;worker_cpu_affinity 0001 0010 0100 1000⽐如8核配置:worker_processes 8;worker_cpu_affinity 00000001 00000010 00000100 0000100000010000 00100000 01000000 10000000;worker_processes最多开启8个,8个以上性能提升不会再提升了,⽽且稳定性变得更低,所以8个进程够⽤了。
【转】关于502badgateway报错的解决办法502 Bad Gateway服务器作为⽹关或者代理时,为了完成请求访问下⼀个服务器,但该服务器返回了⾮法的应答。
解决办法是:再刷新⼀下⽹页或清理⼀下电脑的缓冲⽂件在打开你想打开的⽹页就好了. ⼀般情况下,这种办法是⾏得通的,但也不排除你所访问的⽹页被屏蔽的可能,如果你所访问的⽹页被屏蔽的话,就不管你怎么刷新也是没⽤的了。
1.什么是502 bad gateway 报错简单来说502是报错类型代码bad gateway错误的⽹关2.产⽣502错误的原因连接超时我们向服务器器发送请求由于服务器当前链接太多,导致服务器⽅⾯⽆法给于正常的响应,产⽣此类报错,具体如下:第⼀个原因:DNS 缓冲。
这种情况的通常原因是因为你在未开启vpn的情况下访问了facebook这样的⽹站。
这个时候⾃然访问不上,同时却在本机留下了缓冲。
这种情况通常在⼏分钟之内就可以访问了。
也可以尝试在dos窗⼝运⾏ ipconfig /flushdns,该命令会刷新DNS缓冲。
第⼆个原因:你的浏览器开了代理什么的。
确认⼀下关掉代理。
第三个原因:dns 被劫持了,即使使⽤国外的dns,也会被劫持。
有些机⼦开vpn能够访问,有些机⼦确不能。
并且排除了代理、防⽕墙、本地⽹络的原因。
这个时候同时ping远程⽹站,⽐如facebook。
不能访问的机⼦通常获取了⼀个怪异的ip,从任何地⽅都ping不通的ip。
⽽能访问的机⼦ip,在不能访问的机⼦上直接可以访问,也可以ping通。
这种情况我们可以去掉VPN服务器的DNS。
切换另外的dns。
在windows系统中,可以在本地⽹络连接的属性中,去掉默认的dns,选⽤国外的dns,⽐如google的。
或opendns。
3.502错误的HTTP周期任何客户端(如Web浏览器或我们的CheckUpDown机器⼈)经过下列循环时,与您的Web服务器沟通:打开⼀个IP套接字连接到该IP地址。
清理服务器缓存的方法清理服务器缓存是保持服务器性能和稳定性的重要步骤。
缓存是存储在服务器上的临时数据,用于加快访问速度和减轻服务器负载。
然而,长期积累的缓存可能会占用过多的存储空间,并且可能会包含过期或无效的数据。
因此,定期清理服务器缓存是必要的。
以下是清理服务器缓存的几种常见方法:1. 清理浏览器缓存:在客户端浏览器中,用户访问网站时会缓存一些静态资源,如图片、脚本和样式表。
清理浏览器缓存可以通过在浏览器设置中找到“清除缓存”选项来完成。
2. 清理操作系统缓存:操作系统也会缓存一些文件和数据,以提高读取速度。
在Windows操作系统中,可以通过在命令提示符下输入“ipconfig /flushdns”来清除DNS缓存。
在Linux操作系统中,可以使用“sync”和“echo 3 >/proc/sys/vm/drop_caches”命令来清除缓存。
3. 清理Web服务器缓存:如果您使用的是Web服务器,如Apache或Nginx,您可以配置服务器以自动清理缓存或手动清理缓存。
对于Apache,可以使用mod_cache模块进行配置。
对于Nginx,可以使用proxy_cache_purge模块进行配置。
4. 定期清理临时文件和日志:服务器上的临时文件和日志可能会占用大量的存储空间。
定期清理这些文件可以释放空间并提高性能。
可以创建一个脚本或使用工具来自动清理这些文件。
5. 使用缓存清理工具:有许多工具可用于清理服务器缓存,例如Redis的缓存清理命令、Memcached的flush_all命令等。
这些工具使您能够直接清理服务器上的缓存。
请注意,在清理服务器缓存之前,请确保您了解清理的影响,并备份重要的数据和文件。
此外,清理服务器缓存应该是一个定期的任务,以确保服务器的良好运行。
nginx 301跳转踩坑总结
在进行nginx的301跳转时,可能会遇到一些问题和坑,下面是一些常见的踩坑总结:
1. 重定向循环:当配置中的源页面和目标页面相同时,可能会导致重定向循环,让浏览器无法正常访问页面。
需要确保源页面和目标页面不相同,可以通过添加条件判断来避免重定向循环。
2. 配置错误:在nginx配置中正确写入重定向规则很关键,一些常见的错误包括缺少分号、拼写错误、目标地址错误等。
在编辑nginx配置时,一定要检查配置的语法和拼写错误。
3. 缓存问题:nginx的缓存机制可能会导致301跳转没有立即生效。
可以尝试清空nginx的缓存,或者在配置中添加禁用缓存的设置。
4. 路径问题:在进行重定向时,需要确保源地址和目标地址的路径和文件名都是匹配的。
如果路径和文件名不匹配,可能会导致跳转失败或者访问错误的页面。
5. 代理问题:如果nginx配置中使用了反向代理设置,需要确保代理的配置正确且不影响重定向的生效。
可以尝试暂时禁用反向代理,再进行重定向的测试。
总之,在进行nginx的301跳转时,需要细心检查配置,避免
常见的错误和问题,确保跳转能够正常生效。
如果遇到问题,可以查看nginx的错误日志,以便进一步排查和解决。
ng控制缓存策略在Web开发中,缓存策略对提高网站性能和响应速度非常重要。
在Nginx中,可以通过以下几种方式控制缓存策略:1.使用expires指令:该指令可以设置HTTP响应头的Expires字段,指定浏览器在缓存中保存图片的期限。
例如,如果你想让浏览器在7天内保存图片,可以这样设置:expires 7d;2.使用proxy_cache_valid指令:该指令可以设置HTTP响应头的Cache-Control字段,控制缓存的生命周期。
例如,如果你想让缓存失效时间为2天,可以这样设置:proxy_cache_valid 200 304 2d;3.使用proxy_no_store指令:该指令可以防止Nginx把不满足缓存条件的请求结果存储到缓存中。
例如,如果你想禁止某些文件被缓存,可以这样设置:proxy_no_store;4.使用proxy_cache_revalidate指令:当使用缓存时,如果源服务器返回的状态码为304(未修改),Nginx会直接使用缓存。
但是,如果源服务器返回了新的内容,Nginx仍然会重新下载并存储到缓存中。
如果你想让Nginx在这种情况下也直接使用缓存,可以这样设置:proxy_cache_revalidate;5.使用proxy_cache和proxy_cache_key指令:这两个指令可以启用和配置Nginx的缓存功能。
例如,你可以这样设置:proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m max_size=10g inactive=60m use_temp_path=off; proxy_cache_key"$scheme$proxy_host$request_uri";以上是Nginx中常用的几种控制缓存策略的方法。
在实际使用中,可以根据具体需求选择合适的方法。
Nginx与浏览器缓存的处理方法
【来源:小鸟云计算】
小鸟云,免费12个月主机套餐,只为建站而生。
一、浏览器对缓存的处理:Internet选项
★控制请求服务器策略:是忽略资源的缓存策略的情况下额外强制请求服务器的意思。
★检查存储的页面较新版本
1.每次访问网页时
不管是否有缓存、资源状态是否过期,都会再次请求服务器。
2.每次启动Internet Explorer时
不管是否有缓存、资源状态是否过期,都会再次请求服务器。
3.自动
大体上和2是一样的,只是对于图片的策略有点不同。
4.从不
完全按照资源的缓存策略来请求服务器。
★ F5 刷新:请求服务端,但是会根据和服务器对比文件来确定是否下载
★ Ctrl + F5刷新:一定会去服务器下载。
二、缓存控制策略
★Last-Modified/If-Modified-Since要配合Cache-Control使用,Etag/If-None-Match也要配合Cache-Control使用。
ps:分布式系统里多台机器间文件的last-modified必须保持一致,以免负载均衡到不同机器导致比对失败
分布式系统尽量关闭掉Etag(每台机器生成的etag都会不一样) ★HTML通过meta的http-equiv属性控制浏览器缓存策略:通过设置Pragma和Cache-control和expires控制
ps:只能控制html的缓存策略,不能控制css/js/图片的缓存策略。
Cache-control的max-age和expires同时存在,那么先处理max-age。
Cache-control指定了no-cache后,max-age和expires。