да, должен.
В основном все кэшируется, кроме исключений.
location / {
proxy_cache cache;
proxy_cache_valid 200 302 304 180m;
proxy_cache_valid any 1s;
proxy_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";
proxy_hide_header "Set-Cookie";
proxy_ignore_headers "Cache-Control" "Expires";
add_header Cache-Control private;
expires 180m;
include /etc/nginx/proxy.conf;
if ($request_uri = /index.php?main_page=accountbox) {
return 412;
}
# еще штук 20 подобных ($request_uri = /index.php?...) отсылок на на бэкенд
if ($arg_main_page = nocachedajax) {
return 412;
}
# еще штук 10 подобных ($arg_xxx = /yyy) отсылок на на бэкенд
if ($request_method = POST ) {
return 412;
}
error_page 412 = @fallback;
error_page 413 = @longcache;
}
location @fallback {
proxy_cache off;
include /etc/nginx/proxy.conf;
expires off;
}
то есть кэшируется все, за рядом исключений.
Строка для создания ключа включает в себя не нормализованный $request_uri
Еще раз повторю, что надо:
есть ряд запросов, которые НЕ надо кэшировать для обычных пользователей и наоборот надо для роботов.
Например:
1) имя пользователя/статус shopping cart вверху страницы не надо кэшировать для пользователей и надо для роботов (пусть хоть пустой ответ им идет - им по барабану)
2) запрос "/index.php?main_page=nocachedajax&q=savelocation" пишет в сессию урл последней странички и отдает пустую строку.
для пользователя его НЕ надо кэшировать, а для роботов нужно(поскольку не нужно для них хранить последний урл в сессии).