当前位置:首页 > 服务器技术 > nginx

Nginx配置 – 在某些路径上缓存标头

根据我对nginx文档的理解,位置不能嵌套(或者更确切地说,如果它们的效果不可继承),并且proxy_pass不能属于服务器{}级别.所以我现在的配置是这样的,我知道我可以通过使用文件路径减轻一些但是让我假装在使用proxy_pass时我想在不同的路径上使用不同的缓存头.据推测,有一种更好的方式来写这个没有重复:

server {
  listen  80;
  server_name salessystem.acmecorp.com;

  location /extjs/ {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires max;
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }

  location / {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires epoch;
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }
}

解决方法:

我想你的nginx配置如下:

>因为它只是两个不同位置的expires标头不同,尽管两者都匹配代理
服务器.
>尝试将两个位置放在单个块中
>基于查询字符串,(或位置匹配字符串)设置不同
过期标题

标签.

server {
  listen  80;
  server_name salessystem.acmecorp.com;

  location ~* (/extjs/|/) {
    ## proxy_buffers 128 256k;
    proxy_pass http://localhost:5400/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    add_header 'X-UA-Compatible' 'IE=Edge;chrome=1';
    expires max;
      if ($query_string ~ /extjs/) {
      expires epoch;
      }
    gzip  on;
    gzip_http_version 1.1;
    gzip_vary on;
    gzip_comp_level 7;
    gzip_proxied any;
    gzip_types text/html text/css text/pdf application/json application/x-javascript text/javascript;
    access_log off;
    break;
  }

}

但是请根据您的需要进行测试,特别是在位置和query_string值匹配的正则表达式匹配附近.

然而,目前尚不清楚,为什么你想要从代理服务器(似乎是动态应用服务器)提供extjs,因为如果我的假设是正确的,它们只是纯文本文件.与extjs相关的请求不需要通过代理或app逻辑系统,只需通过文件系统独立提供即可.我想把它保存在它独立的位置,并且在它自己的位置块中具有唯一的gzip / expires指令,而其他常用指令可以保存在服务器块本身中.

例如:

server {
   ...
   common gzip directives
   common header setters
   common expires setters
   ...
   location / {
     proxy to backend app server
     settings unique to / location
     ..
   }
   location /extjs {
     settings unique to /extjs location
     expires header reset
     ...
   }
}

【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!