Nginx缓存

  1. http{
  2. upstream cache {
  3. server 192.168.69.113:8081;
  4. server 192.168.69.113:8082;
  5. server 192.168.69.113:8083; }
  6. proxy_cache_path /soft/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;
  7. server {
  8. listen 80;
  9. server_name 192.168.69.12;
  10. location / {
  11. proxy_pass http://cache;
  12. proxy_cache code_cache;
  13. proxy_cache_valid 200 304 12h;
  14. proxy_cache_valid any 10m;
  15. proxy_cache_key $host$uri$is_args$args;
  16. add_header Nginx-Cache "$upstream_cache_status";
  17. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  18. include proxy_params;
  19. }
  20. }

proxy_cache_path /soft/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;

  • #proxy_cache_path存放缓存临时⽂件

  • #levels 按照两层⽬录分级

  • #keys_zone 开辟空间名, 10m:开辟空间⼤⼩, 1m可存放8000key

  • #max_size 控制最⼤⼤⼩, 超过后Nginx会启⽤淘汰规则#inactive 60分钟没有被访问缓存会被清理

  • #use_temp_path 临时⽂件, 会影响性能, 建议关闭

proxy_cache code_cache;

  • 开启proxy_cache,code_cache为proxy_cache_path中的keys_zone

proxy_cache_valid 200 304 12h;

  • 状态码200|304的过期为12h

proxy_cache_valid any 10m;

  • 其他状态码过期为10m

proxy_cache_key $host$uri$is_args$args;

  • 给缓存数据定义一个键

add_header Nginx-Cache “$upstream_cache_status”;

  • 增加头信息, 观察客户端response是否命中

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

  • 出现500-504或错误, 会跳过此台服务器访问下台

删除缓存:删除/soft/cache中的内容即可

设置部分内容不缓存

  1. if ($request_uri ~ ^/(url3|login|register|password)) {
  2. set $cookie_nocache 1;
  3. }
  4. location / {
  5. proxy_pass http://cache;
  6. proxy_cache code_cache;
  7. proxy_cache_valid 200 304 12h;
  8. proxy_cache_valid any 10m;
  9. proxy_cache_key $host$uri$is_args$args;
  10. #不缓存配置,如果至少有一个值的字符串参数不为空或不等于0,那么响应将不会被保存
  11. proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
  12. add_header Nginx-Cache "$upstream_cache_status";
  13. proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
  14. include proxy_params;
  15. }

缓存互串

  1. proxy_cache_key $host$uri$is_args$args;
  2. 通过这样的配置,存在用户和用户间的缓存互串问题
  3. 可以通过以下方式解决
  4. proxy_cache_key $http_cookie$uri$is_args$args;
  5. 但是还有个问题,例如一个不会变的静态资源,这样的配置,来100个用户请求,这样就保存了至少100
  6. 总结:nginx缓存除了处理静态资源,其他还是谨慎使用

Rewrite

  1. Syntax: rewrite regex replacement [flag];
  2. Default: --
  3. Context: server, location, if
  4. //所有请求转发⾄/pages/maintain.html
  5. rewrite ^(.*)$ /pages/maintain.html break;

image.png

  1. location ~ ^/break{
  2. rewrite ^/break /test/json break;
  3. }
  4. location ~ ^/last{
  5. rewrite ^/last /test/josn last;
  6. }
  7. location /test/{
  8. default_type application/json;
  9. return 200 '{"status":"success"}';
  10. }
  11. 127.0.0.1/break >>>404
  12. 127.0.0.1/last >>>{"status":"success"}

last 与 break 对⽐总结:
last会将replacement作为一个新请求,然后再去匹配localtion
break不会发起新请求,replacement如果已经定位到资源就返回,没有返回404

  1. server {
  2. listen 80;
  3. server_name bgx.com;
  4. rewrite ^ http://www.bgx.com$request_uri?;
  5. }
  6. server {
  7. listen 80;
  8. server_name www.bgx.com;
  9. }

Return

  1. 示例1
  2. server{
  3. listen 80;
  4. server_name www.aming.com;
  5. return 403;
  6. ..... //下面所有都不会执行
  7. }
  8. 示例2
  9. server {
  10. .....
  11. if ($request_uri ~ "\.htpasswd|\.bak")
  12. {
  13. return 404;
  14. rewrite /(.*) /aaa.txt; //该行配置不会被执行。
  15. }
  16. //如果下面还有其他配置,会被执行。
  17. .....
  18. }
  1. 示例3
  2. server{
  3. listen 80;
  4. server_name www.aming.com;
  5. return 200 "hello";
  6. }
  7. 说明:如果要想返回字符串,必须要加上状态码,否则会报错。
  8. 还可以支持json数据
  9. 示例4
  10. location ^~ /aming {
  11. default_type application/json ;
  12. return 200 '{"name":"aming","id":"100"}';
  13. }
  14. 也支持写一个变量
  15. 示例5
  16. location /test {
  17. return 200 "$host $request_uri";
  18. }
  1. server{
  2. listen 80;
  3. server_name www.aming.com;
  4. return 301 http://www.aminglinux.com/123.html;
  5. }
  6. 注意:return后面的url必须是以http://或者https://开头的。