Настройка кеширования сайта на уровне nginx

Важно помнить, что nginx по умолчанию не кеширует POST запросы!!!

Долгими мучениями родился вот такой конфиг:

# будем кешировать всю страницу целиком
fastcgi_cache_path /var/cache/nginx levels= keys_zone=wholepage:6m;
fastcgi_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri";

server {
	ssi on;
        listen 80;
	server_name  *.local 192.168.0.62;

        gzip on;
        gzip_disable "msie6";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 5;
        gzip_buffers 16 8k;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

        log_format main      '$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri|$request';
        access_log /var/log/nginx/$host.access.log;
        error_log /var/log/nginx/$host.error.log;

        index index.php index.html;

	if ($host ~* ^([a-z0-9\.\-]+)\.local$) {
		set $root "/files/www/$1";
	}
	
	client_max_body_size 80m;

        root $root;

        location ~* ^.+\.(jpg|jpeg|gif|png|ico|js|css)$ {
                expires max;
        }

        location ~ ^/ls_security_key.php$ {
                fastcgi_pass unix:/var/run/php5-fpm.sock;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

	location ~ /admin {
                # страницы начинающиеся с admin не будем кешировать
		try_files $uri @ls;
	}


	location / {
                # все остальные страниц будем кешировать
		try_files $uri @lscache;
	}


	# php 
	location @ls {
		# Проксируем на php-fpm
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root/index.php;
		fastcgi_param SCRIPT_NAME /index.php;
	}

	# php кеш
	location @lscache {

		# Проксируем на php-fpm
		fastcgi_pass unix:/var/run/php5-fpm.sock;
		include fastcgi_params;
		fastcgi_param SCRIPT_FILENAME $document_root/index.php;
		fastcgi_param SCRIPT_NAME /index.php;

		fastcgi_cache wholepage;
                fastcgi_cache_valid 200 301 302 304 6m;
                fastcgi_cache_key "$request_method|$http_if_modified_since|$http_if_none_match|$host|$request_uri|$request";
                fastcgi_hide_header "Set-Cookie";
                fastcgi_ignore_headers "Cache-Control" "Expires";

	}
}


Динамическое «окно» в закэшированной странице


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

В ту часть страницы, которая должна быть динамической, вставьте вот такой «HTML-комментарий»:

<!--# include virtual="/get_user_info/" -->


В разработке конфига использовалась статья с хабра
Понравился пост? Поделись с друзьями:

1 комментарий

avatar
Интересно
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.