Назад | Перейти на главную страницу

Nginx не кэширует прокси-запросы

Я считаю, что правильно настроил nginx для кеширования всех запросов, проксированных на PHP-FPM, но он не работает.

Вот бит "http" из /etc/nginx/nginx.conf:

http {
     include       /etc/nginx/mime.types;
     default_type  application/octet-stream;

     log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

     access_log  /var/log/nginx/access.log  main;

     sendfile        on;

     proxy_cache_path        /var/cache/nginx/static levels=1:2 keys_zone=static:20m;

     include /etc/nginx/conf.d/*.conf;

     keepalive_timeout   30;

     fastcgi_buffers     8 16k;
     fastcgi_buffer_size 32k;

     gzip                on;
     gzip_types          text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
     gzip_comp_level     5;
     gzip_vary           on;
     gzip_proxied        any;
     gzip_http_version   1.0;

     server_tokens       off;
     etag                off;

}

И в моем "серверном" бите:

location ~* \.php$ {

        proxy_cache             static;
        proxy_cache_key         "$host$request_uri";
        proxy_cache_valid       any 30m;

        try_files               $uri =404;
        fastcgi_pass            127.0.0.1:9000;
        fastcgi_param           SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param           PATH_INFO $fastcgi_script_name;
        fastcgi_read_timeout    600s;
        include                 /etc/nginx/fastcgi_params;

}

После запроса любого файла .php в домене ничего не кэшируется в / var / cache / nginx / static. Файлы cookie не установлены, каталог кеша доступен для записи nginx, и в журнале ошибок nginx нет ничего необычного.

Любые идеи? Это nginx / 1.7.1 на виртуальной машине CentOS 6.5.

Вы используете FastCGI, а не прокси. Значит вам нужно поменять все proxy_* запросы на их эквивалент fastcgi_* директивы. Например. fastcgi_cache вместо того proxy_cacheи так далее для всех.