Nginx缓存服务器配置

小咪咪 2022-05-13 02:28 434阅读 0赞

ngx_http_proxy_module模块

代理模块,允许向另一个服务器发送请求

重要的几个指令

1.proxy_pass URL;

设置代理服务器的协议和地址以及应该映射位置的URI。作为协议,可以指定“HTTP”或“HTTPS”。地址可以指定为域名或IP地址,以及可选端口
有个容易混的地方需要注意下

  1. server {
  2. ...
  3. server_name HOSTNAME;
  4. location /uri/ {
  5. proxy http://host[:port];
  6. ##proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机
  7. ##客户端访问:http://HOSTNAME/uri 实际上访问: http://host/uri
  8. }
  9. ...
  10. }
  11. server {
  12. ...
  13. server_name HOSTNAME;
  14. location /uri/ {
  15. proxy http://host/new_uri/;
  16. #proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri;
  17. #客户端访问http://HOSTNAME/uri/,实际上是在访问 http://host/new_uri/
  18. }
  19. ...
  20. }

2、proxy_set_header field value;

设定发往后端主机的请求报文的请求首部的值;可以自定义首部

  1. proxy_set_header X-Real-IP $remote_addr;
  2. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

3、proxy_cache_path

定义可用于proxy功能的缓存;用户访问代理服务器的时候,如果每次都往后端去重新取数据,这个非常耗资源,所以可以再这里设置缓存,将常用的缓存在代理服务器本地。这里使用的方式需要先用这个指令定义,再用proxy_cache这个指令指定使用。这个指令后面会说。
格式:

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];

示例:

  1. proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:1 keys_zone=pcache:5m max_size=2g

表示缓存存放的路径为/usr/local/nginx/proxy_cache,levels=1:2:1 用户访问的时候我们可以设置对uri做hash得到的值,从右到左。第1个字符表示第一级目录的目录名,第2,3个字符表示第二级目录名,第4个字符表示第三级目录名。这种方式方便查找,,假设我们基于uri做hash,用户访问的时候我们根据hash的结果查找目录。可以快速检索。pcache表示键的名字,5m是键使用的空间。目录磁盘空间最大不能超过2g,可以结合后面的图进行理解

4、proxy_cache zone | off;

指明要调用的缓存,或关闭缓存机制;使用的时候再http,server,location中写
示例:

  1. proxy_cache pcache;
  2. #表示使用pcache缓存,这个使用之前必须先用proxy_cache_path先定义。

5、 proxy_cache_key string;

缓存中用于“键”的内容;

  1. proxy_cache_key $scheme$proxy_host$request_uri;
  2. 这里设置$scheme$proxy_host$request_uri作为键

6、proxy_cache_valid [code …] time;

定义对特定响应码的响应内容的缓存时长;定义在http{…}中;Nginx不仅可以

常用配置的示例

环境
代理服务器ip:192.168.253.128
后端真实服务器ip:192.168.253.139 (这台机上有一个httpd服务,index.html内容为httpd)

  1. http {
  2. include mime.types;
  3. default_type application/octet-stream;
  4. sendfile on;
  5. keepalive_timeout 65;
  6. proxy_cache_path /usr/local/nginx/proxy_cache levels=1:2:1 keys_zone=pcache:5m max_size=2g; ##定义缓存存放路径
  7. server {
  8. listen 80;
  9. server_name localhost;
  10. location / {
  11. root html;
  12. proxy_cache pcache; ##使用上面定义的pcache缓存
  13. proxy_pass http://192.168.253.139; ##后端服务器为192.168.253.139
  14. proxy_cache_key $request_uri; ##将$request_uri作为键
  15. proxy_cache_valid 200 302 301 1h;##将响应码200,302,301进行缓存,时间为1小时
  16. proxy_cache_valid any 1m; ##除了200,302,301这几个响应码,其他的响应码都缓存1分钟。
  17. }
  18. error_page 500 502 503 504 /50x.html;
  19. location = /50x.html {
  20. root html;
  21. }
  22. }
  23. }

然后启动Nginx

  1. nginx

访问一下代理服务器看是否正常
这里写图片描述
这个是后端真实服务器的页面。之前设置的。所以可以看出是成功了的。然后我们可以看一下缓存是否生效了
这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,434人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Nginx缓存配置

    前言: 什么是Nginx的缓存功能: 概念: Nginx通过配置,可以告知浏览器,返回数据的有效时间,浏览器根据数据的有效时间,确定是否再次到服务器请求。如果没