Page 1 of 1

Nginx+php-fpm cache ЧПУ?

Posted: Tue Dec 19, 2017 9:34 pm
by aluminoter
Подскажите пожалуйста, как закешировать ЧПУ-ные страницы.
Движок DLE, кто знает там все криворуко сделано, и потому дохера всяких рерайтов надо писать, если мне добавить в локейшн с .php то кешируються только php файлы, а мне надо чтобы ЧПУ-ные страницы кешировались.

Куда мне надо добавить вот эту конструкцию, чтобы закешировать .html URL

Code: Select all

fastcgi_cache mycache;
fastcgi_cache_valid 200 301 302 60m;
add_header X-FastCGI-Cache $upstream_cache_status;

Re: Nginx+php-fpm cache ЧПУ?

Posted: Thu Dec 21, 2017 8:45 pm
by aluminoter
Вообщем сам и отвечу. Проблема бы с заголовками, надо игнорировать заголовки Cache-Control Expires.

Правильный конфиг, вставлять в локейш с обработкой php.

Code: Select all

fastcgi_cache myCacheZone;
fastcgi_cache_valid 200 301 302 60m;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
add_header X-FastCGI-Cache $upstream_cache_status;
В заголовках появится строка X-FastCGI-Cache - принимает значение MISS или HIT. HIT- значить страница закеширована.

Ну и конечно можно вставлять блоки для игнорирования кэша определенных страниц, например админки и тп.

Например:

Code: Select all

location ~ [^/]\.php(/|$) {
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            if (!-f $document_root$fastcgi_script_name) {
                return  404;
            }
			
			#Cache everything by default
			set $no_cache 0;
			
			#Don't cache the following URLs
			if ($request_uri ~* "/(admin|administrator/|login.php)")
			{
				set $no_cache 1;
			}
			
			#cache zone
			fastcgi_cache myCacheZone;
			fastcgi_cache_valid 200 301 302 60m;
			fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
			add_header X-FastCGI-Cache $upstream_cache_status;
			fastcgi_cache_bypass $no_cache;
			fastcgi_no_cache $no_cache;

            fastcgi_pass    127.0.0.1:9004;
            fastcgi_index   index.php;
            include         /etc/nginx/fastcgi_params;
}

Да и не забываем в главную секцию http прописать зону кеша. (/etc/nginx/nginx.conf):

Code: Select all

fastcgi_cache_path /etc/nginx/cache/myCacheZone levels=1:2 keys_zone=myCacheZone:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";