首先如何配置nginx到try_files,如果不存在,请遵循request_uri

时间:2013-08-08 03:56:20

标签: nginx rewrite page-caching

我们有id分区和子域的页面缓存。比如ny.site.com/cat/12345la.site.com/dog/234等请求,nginx需要

  1. 检查文件/cat/ny/1234/5.html是否存在,将其返回
  2. 否则,只需使用原始request_uri点击应用服务器,即可创建缓存文件
  3. 我们设法找出子域和id分区部分,但在try_files部分没有运气。总是得到像rewrite or internal redirection cycle while internally redirecting to

    这样的无限循环错误

    我们的nginx.conf文件就像

    rewrite "/cat/([0-9]{4})([0-9]{1,4})" /system/cache/cat/$subdomain/$1/$2.html break;
    rewrite "/cat/([0-9]{1,4})" /system/cache/cat/$subdomain/$1.html break;
    try_files $uri $request_uri;
    

    任何提示?谢谢!

    更新 我尝试了以下内容。 Nginx在文件系统中寻找$ request_uri(例如/ cat / 12345),而不是点击app服务器。有什么想法吗?

    try_files $uri @old;
    location @old {
        rewrite ^ $request_uri break;
    }
    

2 个答案:

答案 0 :(得分:5)

试试这个

location ^~ ^/cat/([0-9]{4})([0-9]{1,4}) {

    try_files "/cat/ny/$1/$2.html" @app_server;

}
location @app_server{

    # pass this to your app server for processing.

}
  1. 使用^〜,因为这还包括/ cat / 12345 /(斜杠结束)等边缘情况。
  2. 并确定您是否需要$ uri(没有查询字符串)或$ request_uri (包含查询字符串)。

答案 1 :(得分:0)

我之前从未尝试过这个,但这就是我写它的方式

location / { # or whatever location you see fit to your requirements
    try_files $uri.html $uri;
    # I don't know if the `.` needs to be escaped `$uri\.html`, you can try both
}