Re: Как очистить кэш Nginx

Lystopad Aleksandr laa на laa.zp.ua
Сб Янв 7 17:18:40 UTC 2017


 Hello, Seriyyy95!

On Fri, Jan 06, 2017 at 11:21:14AM -0500
nginx-forum на forum.nginx.org wrote about "Re: Как очистить кэш Nginx":
> Так и не смог разобраться. Стиль обрабатывается здесь:
> 
> location ~ \.(css|htc|less|js|js2|js3|js4)$ {
>     access_log /var/log/nginx/access_css.log;
>     expires -1s;
>     add_header Pragma "public";
>     add_header Cache-Control "max-age=-1, public";
>     add_header X-Powered-By "W3 Total Cache/0.9.5.1";
>     try_files $uri $uri/ $uri.html /index.php?$args;
> }

Погодите, стиль обрабатывается тут, но каким образом?
У вас try_files с несколькими вариантами поиска.

Какой из них срабатывает?
Чтобы разобраться, вы можете добавить $document_root в вывод лога (log_format)
и делать тестовые запросы к стилю и смотреть. Добавить можно и еще других
переменных в вывод лога, они помогут вам. Также, можете включить
дебаг в error_log для отдельного location и разбираться в нем что происходит для
вашего проблемного стиля.

В идеале, ваш стиль должен отдаваться просто с диска, так правильно
и быстро. Но, возможно, он отдается пхп-скриптом. 

Я почти уверен, что проблема в WP total cache .
 
> Если добавить access log, то все стили исправно пишутся в лог файл. Дальше
> php обрабатывается здесь:
> 
>         location @php {
>                 access_log /var/log/nginx/access_css3.log;
> 
>                 fastcgi_index index.php;
>                 fastcgi_param PHP_ADMIN_VALUE "sendmail_path =
> /usr/sbin/sendmail -t -i -f admin на losst.ru";
>                 fastcgi_pass unix:/var/www/php-fpm/losst.sock;
>                 fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
>                 try_files $uri =404;
>                 include fastcgi_params;
>         }
> 
> Причем в получившемся логе строк к запросами к css нет. Значит PHP не
> кэширует? Тогда кто? Я не понимаю. В первый раз я не прикрепил главный
> конфиг /etc/nginx/nginx.conf. Может в нем дело:
> 
> 
> user  apache;
> worker_processes  1;
> 
> error_log  /var/log/nginx/error.log warn;
> pid        /var/run/nginx.pid;
> 
> 
> events {
>     worker_connections  1024;
> }
> 
> 
> 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;
>     #tcp_nopush     on;
> 
>     keepalive_timeout  65;
> 
>     #gzip  on;
> 
>         gzip on;
>         gzip_min_length  1100;
>         gzip_buffers  4 32k;
>         gzip_vary on;
>         gzip_types text/css text/plain application/json
> application/x-javascript text/xml application/xml application/xml+rss
> text/javascript application/javascript text/x-js;
>         gzip_proxied any;
>     include /etc/nginx/conf.d/*.conf;
>         include /etc/nginx/vhosts/*/*.conf;
> server {
>         server_name localhost;
>  disable_symlinks if_not_owner;
>         listen 80;
>         include /etc/nginx/vhosts-includes/*.conf;
>         location @fallback {
>                 error_log /dev/null crit;
>                 proxy_pass http://127.0.0.1:8080;
>                 proxy_redirect http://127.0.0.1:8080 /;
>                 proxy_set_header Host $host;
>                 proxy_set_header X-Forwarded-For
> $proxy_add_x_forwarded_for;
>                 proxy_set_header X-Forwarded-Proto $scheme;
>                 access_log /var/log/nginx/access_proxy.log ;
>         }
>     }
>         client_max_body_size 128m;
> }
> 
> Лог access_proxy пуст.

Значит в location @fallback не попадают запросы.

По поводу кучи разных инклудов советую почитать что
об этом думает автор nginx Игорь Сысоев:
https://habrahabr.ru/company/oleg-bunin/blog/313666/


Еще раз, вам лучше добиться того, чтобы статический объект отдавался простым чтением
с диска, а не в результате обработки скрипта.

Попробуйте сделать как-то так и посмотреть результат:

location = /style.css {
 root /directory/with/style;
 expires -1;
 access_log /log-dir/my-test.log; 
}

Удачи.


Подробная информация о списке рассылки nginx-ru