В интернетах не смог нагуглить внятной инструкции по настройке связки nginx + php-fpm и при этом, чтобы nginx кешировал странички.
Почему-то инструкции либо по настройке fastcgi, либо по настройке кеша.
Совместить эти два мануала почему-то никто не осилил и это у меня вызвало некоторые сложности.
Конфиг php-fpm максимально стандартный, там не с чем особо мудрить
Короче, делюсь с вами инфой:
server { listen your_ip:80; server_name example.com; access_log /var/www/example.com/logs/nginx.access.log; error_log /var/www/example.com/logs/nginx.error.log info; root /var/www/example.com/www; # Искренне не понимаю, почему в предыдущих 3х строчках нельзя использовать переменные. # Обжегся, когда пытался сделать красиво в конфиге index index.php; # задаем индексный файл, который должен открываться сначала # идея в том, что весь сайт роутится через него. но всегда есть необходимость открыть просто какой-нибудь пхп файлик # поэтому оставляем эту возможность (подмена ниже) set $fpm_name "/index.php"; # блок конфига, который будет обрабатывать все запросы, кроме тех, что хотим кешировать location / { try_files $uri $uri/ /index.php?$query_string; if ($uri ~ \.php$){ # а вот и подмена set $fpm_name $uri; } include fastcgi_params; include fpm_params; } # описываем что хотим кешировать location ~* ^(\/(articles|reports)\/[0-9]+.+)$ { # в моем случае не нужно кешировать, если пользователь авторизирован на сайте. # если вам это не требуется, то просто удалите if if ($http_cookie !~* "cabinet") { rewrite ^ /ng_cache last; } include fastcgi_params; include fpm_params; } # внутренний урл для кеша location /ng_cache { internal; fastcgi_cache examplecom_cache; fastcgi_cache_valid 200 301 302 304 3m; fastcgi_cache_key "$request_method|$http_if_modifed_since|$http_if_none_match|$host|$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_hide_header "Set-Cookie"; fastcgi_ignore_headers "Cache-Control" "Expires"; include fastcgi_params; include fpm_params; } ........ }
и файлик fpm_params:
# не забываем указать правильный путь до сокета fastcgi_pass unix:/var/run/php-fpm/fcgi-php.sock; fastcgi_index $fpm_name; # тут пригождается наша переменная $fpm_name fastcgi_param SCRIPT_FILENAME $document_root$fpm_name; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k