我刚刚开始使用 nginx,现在我正尝试让它与 Wordpress 插件 WP-SuperCache 配合使用,后者添加了我的博客文章的静态文件。
为了提供静态文件,我需要确保没有设置某些 cookie、它不是 POST 请求,并确保缓存/静态文件存在。
我发现本指南而且看起来很合适。
但我注意到,只要我尝试放里面的东西如果我的网站开始对未重写的 URL 给出 404 错误。
配置的位置块:
location /blog {
index index.php;
set $supercache_file '';
set $supercache_ok 1;
if ($request_method = POST) {
set $supercache_ok 0;
}
if ($http_cookie ~* "(comment_author_|wordpress|wp-postpass_)") {
set $supercache_ok '0';
}
if ($supercache_ok = '1') {
set $supercache_file '$document_root/blog/wp-content/cache/supercache/$http_host/$1/index.html.gz';
}
if (-f $supercache_file) {
rewrite ^(.*)$ $supercache_file break;
}
try_files $uri $uri/ @wordpress;
}
上述方法不起作用,如果我删除上述所有 if 并添加
if ($http_host = 'mydomain.tld') {
set $supercache_ok = 1;
}
然后我在errors.log中得到了完全相同的消息。即:
2010/05/12 19:53:39 [error] 15977#0: *84 "/home/ba/www/domain.tld/blog/2010/05/blogpost/index.php" is not found (2: No such file or directory), client: <ip>, server: domain.tld, request: "GET /blog/2010/05/blogpost/ HTTP/1.1", host: "domain.tld", referrer: "http://domain.tld/blog/"
删除 if 后,一切都会正常进行。我很困惑,完全不知道应该从哪里开始搜索。=/
ba@cell: ~> nginx -v
nginx version: nginx/0.7.65
答案1
我也不太清楚问题是什么,但我比较确定答案是一些特别微妙的,涉及http://wiki.nginx.org/IfIsEvil。
答案2
这是正确的,并且对于 nginx >1 也成立。
切勿在 if 语句中使用 set。