Я использую nginx для кеширования запросов от вышестоящего сервера apache, однако мне нужно, чтобы несколько блоков внутри всегда извлекались из apache. Я надеюсь, что ssi может это сделать, но теги SSI выводятся пользователю без предварительной обработки.
location ~* ^.+\.html$ {
proxy_pass http://localhost:9999;
proxy_cache_key "$prime$scheme$host$request_uri";
ssi on;
ssi_silent_errors off;
log_subrequest on;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Country $country_code;
proxy_cache my-cache;
proxy_cache_bypass $http_x_refresh_cache;
proxy_cache_valid 200 302 30d;
proxy_cache_valid 404 10m;
proxy_cache_valid any 1m;
}
Это соответствующая конфигурация nginx.
proxy_cache_key "$prime$scheme$host$request_uri";
Эта строка кэширует все отдельные части страницы под одним и тем же ключом (URI, введенный пользователем), поэтому разные части страницы перезаписывают друг друга, и тогда возвращается только последняя записанная. Вы хотите использовать $uri
скорее, чем $request_uri
, так что каждая часть каждой страницы кэшируется под своим личным именем.
Удостоверься что http: // локальный: 9999 не сжимает вывод. Просто добавив
proxy_set_header Accept-Encoding "";