这里我要提到的是另一种实现方式proxy_cache结合ssi来实现。
先大致介绍下nginx的proxy_cache:http://blog.s135.com/nginx_cache/
有兴趣的同学可以顺带了解下nginx的proxy_store模块。不过个人一直比较看好proxy_cache,
原因嘛:不需要借助crontab等来定时刷新;也不需要关心分布式同步问题。
再介绍下nginx的ssi .
开启方式:
location / {
ssi on;
}
使用示例:
<!--#include virtual="/ssicache/common/1234/works-rank.html"-->
proxy_cache结合ssi来实现具体使用示例:
1.在你的静态页中ssi一个动态内容:
<!--#include virtual="/ssicache/common/1234/works-rank.html"-->
这个works-rank.html大家困惑了吧,怎么看都是静态页面块呀,别急。
2.写一个代理server:
server{
listen 80;
server_name ssi.bisai.com;
....省略...
rewrite ^/ssicache/common/(.*)/(.*)\.html$ /partial/contest/$1/$2.do last;
location / {
proxy_pass http://contest_servers;
include proxy.conf;
}
}
这样一来,works-rank.html的请求就被rewrite 到/partial/contest/1234/works-rank.do上面去了^_^
3.将动态请求works-rank.do返回的数据用proxy_cache缓存起来,减少对服务器的动态请求。
PS:配置proxy_cache的时候,实际上是缓存^/ssicache的请求。
因为实际最先请求的是/ssicache/common/1234/works-rank.html,发现works-rank.html缓存过期了,才会
重新去ssi.bisai.com请求,最后请求被rewrite到works-rank.do上面去,将得到的内容继续缓存。
server{
listen 80;
server_name bisai.com;
...省略...
location / {
ssi on;
proxy_pass http://contest_servers;
include proxy.conf;
}
location ~ ^/ssicache/ {
proxy_cache cache_one;
proxy_cache_valid 200 304 10m;
proxy_cache_key $host$uri;
proxy_set_header Host "ssi.bisai.com";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header http_x_forwarded_for $http_x_forwarded_for;
proxy_set_header SCRIPT_URL $request_uri;
proxy_pass http://ssi.bisai.com;
}
....省略....
}
好啦,到这为止,功能基本实现了,细节上处理大家可以查阅上面的资料,比如:
1.proxy_temp_path和 proxy_cache_path的设置。
2.如果使用的是velocity模板,使用ssi 语法时对"#"的处理。
这些都很简单了。
这样做完之后,你的这个动态模块实际上是可以共用的,任何需要这样一个模块的地方,都可以直接SSI 进来。
实际上,就是如果你用JS来加载数据实现的话,也同样是可以使用proxy_cache将JS的请求缓存起来的,减少动态请求。
相关推荐
主要介绍了Nginx之proxy_redirect使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
nginx_tcp_proxy_module-master.zip
本篇文章主要介绍了Nginx启用proxy_cache缓存的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
ngx_cache_purge 是 nginx 模块,此模块可以清理 nginx 的 FastCGI、proxy、 SCGI 和 uWSGI 的缓存。配置指令(相同位置语法)fastcgi_cache_purgesyntax: fastcgi_cache_purge on|off|<method> [from all|<ip> [.....
nginx: [emerg] “proxy_cache_path” directive is not allowed here in /etc/nginx/conf.d/default.conf:29 提示意思“proxy_cache_path指令不被允许”,在官网上查找了相关说明,也没有发现问题,最后看应用范围...
nginx_cache_purge,用于清楚nginx缓存的小工具
nginx_tcp_proxy_module-master 是nginx的TCP模块
备用nginx代理模块
今天小编就为大家分享一篇关于nginx proxy_cache批量清除缓存的脚本介绍,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
一个nginx的server模块下需要proxy到两个server,所以就通过location的不同路径来区分转发到不同的服务器上。 一开始是这么写的 location / { proxy_pass http://server1/; } location /index { proxy_pass ...
使用nginx作为http/https正向代理ipm包,包含ngx_http_proxy_connect_module 模块,附带了第三方图片代理配置,带有缓存,可直接做图片服务器 下载后执行:rpm -ivh nginx-1.12.2-1.el7_4.ngx.x86_64.rpm 打包教程:...
顾名思义,proxy_buffer 是用于 proxy 模式的缓冲功能。本文介绍其基本用法。 buffer 是什么 buffer ,即缓冲区,它在 Nginx 上发挥的作用就是 启用一个缓冲区,先在这个缓冲区内进行存储,再把数据发送出去 。和...
用于nginx的http正向代理https使用的模块
当待验证的客户端证书是由intermediate-CA签发,而非有root-CA签发时,需要在proxy_ssl_trusted_certificate中配置intermediate-CA和root-CA组成的证书链文件 也就是说,直接尝试使用中级 CA 来验证客户端是无法通过...
最近排查一个web服务的问题,webserver使用的nginx,最终发现是踩了nginx中proxy_pass的一个坑,这里记录下来。 踩坑经过 一个线上的http服务,示例nginx关键配置如下: server { listen 80; server_name ligang....