#### # nginx设置静态资源压缩和过期时间设置
可以通过Nginx对服务器上的静态资源进行过期时间设置和对资源进行压缩传输来减少服务器的带宽开销。
以下是nginx对静态资源过期时间的设置方法:
location ~* .(ico|gif|bmp|jpg|jpeg|png|swf|js|css|mp3) {
root /var/www/opkeep;
expires 30d;
}
上面的配置可以对ico,gif,bmp,jpg,jpeg,swf,js,css,mp3文件进行本地缓存,不用每次访问都重新从服务器获取。
压缩的配置如下:
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript text/css;
对文本、js和css文件进行压缩,一般情况下,压缩后的大小是原始大小的25%,甚至更小。
#### nginx缓存服务器加强版
因为后端服务器经常发生503错误,所以服务不能保证,为了避免访问错误,可以在缓存服务器上做调整。一个特性是,如果缓存过期,但访问后端服务器又不能返回正常的内容,则使用缓存内容,保证服务质量。
Nginx里面可以增加一条这个:
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504; 语法: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_404 | off ...;
默认值:
proxy_cache_use_stale off;
上下文: http, server, location
如果后端服务器出现状况,nginx是可以使用过期的响应缓存的。这条指令就是定义何种条件下允许开启此机制。这条指令的参数与proxy_next_upstream指令的参数相同。
此外,updating参数允许nginx在正在更新缓存的情况下使用过期的缓存作为响应。这样做可以使更新缓存数据时,访问源服务器的次数最少。在植入新的缓存条目时,如果想使访问源服务器的次数最少,可以使用proxy_cache_lock指令。
#### nginx缓存页面后,串会话问题的解决方案 估计zxtm也合适
Nginx支持页面缓存,之前我的博客有介绍配置方案,昨天出了一个诡异的问题,别人的机器登录后,我的机器打开应用的首页会出现别人的用户信息,也就是说我的浏览器访问的应用会话其实是别人的会话。
经检查,nginx会把响应页面的头信息也一起缓存,包括set-Cookie,导致后面访问页面的用户的cookie被设置成缓存的头。
解决方案,nginx提供proxy_hide_header的指令,可以去掉相关的响应头信息:
proxy_hide_header Set-Cookie;
结论:配置后,串会话的问题不再出现
### nginx缓存配置实例
以下配置摘自OSChina.Net官方网站的联通节点配置
#缓存存放路径
proxy_cache_path /disk2/cache/data levels=1:2 keys_zone=static:1000m inactive=600m max_size=100G;
proxy_temp_path /disk2/cache/temp;
location ~ ^/(img|css|js|uploads)/ {
proxy_buffering on;
proxy_cache static;
proxy_cache_key "$host$request_uri$is_args$args";
proxy_ignore_headers "Cache-Control" "Expires";
proxy_cache_min_uses 1;
proxy_cache_valid 200 302 304 5m;
proxy_cache_use_stale http_502 http_503 http_504;
proxy_hide_header set-Cookie;
proxy_pass http://xxx.xxx.xxx.xxx;
include proxy.conf;
}
proxy.conf配置
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-ip $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 300;
proxy_send_timeout 300;
proxy_read_timeout 300;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
gzip.conf配置
gzip on;
gzip_min_length 1000;
gzip_types text/plain text/css application/x-javascript;
### Nginx Location详细规则说明
Nginx大家都知道, 但是很多人能了解到常用的location指令的优先级别是怎么样的,这个也许知道的人就不多了吧. 先前记得有个国人说过一个nginx的“bug”(), 就是关于location配置不当造成的, 这其实并不是nginx的bug, 而是运维人员的对nginx配置location优先级别理解不很透彻造成的.
nginx官方已经指明了location指令说明:
syntax: location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
default: —
context: server, location
让我们先来理解下, nginx 规则处理请求是在对路径匹配在URI规范化以后进行. 所谓规范化, 就是先将URI中形如“%XX”的编码字符进行解码, 再解析URI中的相对路径“.”和“..”部分, 另外还可能会压缩相邻的两个或多个斜线成为一个斜线:
= 开头表示精确匹配, 必须完全吻合才会执行;
^~ 开头表示uri以某个常规字符串开头,理解为匹配 url 路径即可, 如果最大前缀匹配的路径以“^~”开始,那么nginx不再检查正则表达式. nginx不对url做编码,因此请求为/assets/20%/css.css,可以被规则^~ /assets/ /css.css匹配到(注意是空格);
~ 开头表示区分大小写的正则匹配;
~* 开头表示不区分大小写的正则匹配, 与~相反是大小写同等对待的;
/ 通用匹配, 如果没有其它匹配,任何请求都会匹配到.
优先级别基本可以这么认为:
(location =) > (location 完整路径) > (location ^~ 路径) > (location ~* 正则) > (location 路径) > (/)