@time_is_always_against_us

Почему не работает кеширование в NginX?

Сервер на CentOS. Сайт полностью настраивался через ISPmanager. От себя я лишь добавил к стандартным настройкам хоста Alias (код сайта постоянно перезаливается, а картинки редко):
Alias /img "/var/www/www-root/data/img" #папка картинок
Alias /pma "/var/www/www-root/data/pma" #phpmyadmin
Проблема с кэшированием появилась изначально. Хотя соответствующая настройка в конфигурации домена в ISPmanage была выставлена. Выглядело это следующим образом: каждый раз при запуске браузера и открытии сайта он по-новой начинал прогружать статику. Если закрыть вкладу и еще раз запустить сайт уже в новой вкладке - кэш сохранялся. Я сперва это списал на медленную работу из-за https. Ибо не может же ISPmanager глючить на default'ых настройках...

Вчера к стандартным настройкам NginX добавил: "add_header Cache-Control "max-age=2592000, public".
И о чудо кэш заработал. Увы, не на долго... (На сервере есть сайт пустышка - приоритетный сайт, чтобы не могли обращаться по IP к основе. Ему я случайно copy-paste'ул настройки nginx основы. Появился дубликат и nginx не запускался. Когда нашел и исправил проблему, не смотря на "add_header Cache-Control "max-age=2592000, public" в настройках основного сайта, кэш там работать не захотел.)

По ощущениям не работает какая-то мелочь из-за которой указанные настройки, по всей видимости, вообще не используются. Поэтому же трудно загуглить пример настроек и поэкспериментировать с ними...

Настройки IPSManager'a:
5a0b60e7a2eb8809269697.jpeg

Настройках хоста:
<VirtualHost 127.0.0.1:8080>
  ServerName domain.ru
  DocumentRoot /var/www/www-root/data/www/domain.ru
  ServerAdmin admin@domain.ru
  AddDefaultCharset off
  SuexecUserGroup www-root www-root
  CustomLog /var/www/httpd-logs/domain.ru.access.log combined
  ErrorLog /var/www/httpd-logs/domain.ru.error.log
  <FilesMatch "\.ph(p[3-5]?|tml)$">
    SetHandler application/x-httpd-php
  </FilesMatch>
  <FilesMatch "\.phps$">
    SetHandler application/x-httpd-php-source
  </FilesMatch>
  <IfModule php5_module>
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f admin@domain.ru"
    php_admin_value upload_tmp_dir "/var/www/www-root/data/mod-tmp"
    php_admin_value session.save_path "/var/www/www-root/data/mod-tmp"
    php_admin_value open_basedir "/var/www/www-root/data:."
  </IfModule>
  <IfModule php7_module>
    php_admin_value sendmail_path "/usr/sbin/sendmail -t -i -f admin@domain.ru"
    php_admin_value upload_tmp_dir "/var/www/www-root/data/mod-tmp"
    php_admin_value session.save_path "/var/www/www-root/data/mod-tmp"
    php_admin_value open_basedir "/var/www/www-root/data:."
  </IfModule>
  SetEnvIf X-Forwarded-Proto https HTTPS=on
  Alias /img "/var/www/www-root/data/img"
    Alias /pma "/var/www/www-root/data/pma"
  ServerAlias www.domain.ru
  DirectoryIndex index.html index.php
</VirtualHost>
<Directory /var/www/www-root/data/www/domain.ru>
  Options -ExecCGI
  <IfModule php5_module>
    php_admin_flag engine on
  </IfModule>
  <IfModule php7_module>
    php_admin_flag engine on
  </IfModule>
</Directory>
<Directory /var/www/www-root/data/pma>
  php_admin_flag engine on
</Directory>


Настройки nginx:
server {
  server_name domain.ru www.domain.ru;
  charset off;
  index index.html index.php;
  disable_symlinks if_not_owner from=$root_path;
  include /etc/nginx/vhosts-includes/*.conf;
  include /etc/nginx/vhosts-resources/domain.ru/*.conf;
  access_log /var/www/httpd-logs/domain.ru.access.log;
  error_log /var/www/httpd-logs/domain.ru.error.log notice;
  set $root_path /var/www/www-root/data/www/domain.ru;
  root $root_path;
  location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
      try_files /does_not_exists @fallback;
    }
    location / {
      try_files /does_not_exists @fallback;
    }
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
      try_files $uri $uri/ @fallback;
      expires 30d;
      add_header Cache-Control "max-age=2592000,  public";
    }
  }
  location @fallback {
    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;
    proxy_set_header X-Forwarded-Port $server_port;
    access_log off;
  }
  return 301 https://$host:443$request_uri;
  listen SEVER_IP:80;
  listen [2a0***::2]:80;
  gzip on;
  gzip_comp_level 5;
  gzip_disable "msie6";
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}
server {
  server_name domain.ru www.domain.ru;
  ssl on;
  ssl_certificate "/var/www/httpd-cert/www-root/domain.ru.crtca";
  ssl_certificate_key "/var/www/httpd-cert/www-root/domain.ru.key";
  ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4:!RSA+3DES;
  ssl_prefer_server_ciphers on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  add_header Strict-Transport-Security "max-age=31536000;";
  ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
  charset off;
  index index.html index.php;
  disable_symlinks if_not_owner from=$root_path;
  include /etc/nginx/vhosts-includes/*.conf;
  include /etc/nginx/vhosts-resources/domain.ru/*.conf;
  access_log /var/www/httpd-logs/domain.ru.access.log;
  error_log /var/www/httpd-logs/domain.ru.error.log notice;
  set $root_path /var/www/www-root/data/www/domain.ru;
  root $root_path;
  listen SEVER_IP:443;
  listen [2a0***::2]:443;
  location / {
    location ~ [^/]\.ph(p\d*|tml)$ {
      try_files /does_not_exists @fallback;
    }
    location / {
      try_files /does_not_exists @fallback;
    }
    location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {
      try_files $uri $uri/ @fallback;
      expires 30d;
      add_header Cache-Control "max-age=2592000,  public";
    }
  }
  location @fallback {
    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;
    proxy_set_header X-Forwarded-Port $server_port;
    access_log off;
  }
  gzip on;
  gzip_comp_level 5;
  gzip_disable "msie6";
  gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
}


P.S. Это уже не первый вопрос на эту тему здесь. Копаем по крупицам... Когда найдется решение, опишу ему в других своих вопросах. Для будущих поколений так сказать...

Заранее Спасибо, хотя бы за то, что прочитали :)
  • Вопрос задан
  • 2356 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Arik
ISPmanager точно не переписывает конфиг nginx после ваших правок? Т.е. вы добавили, кто залез что включил и ISPmanager сохраняет свой конфиг и reload nginx, теряя ваши правки
Ответ написан
Sanes
@Sanes
Если проверяете через Google Pagespeed, последним пунктом ставьте неограниченное время кеширования.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы