Почему не работает кеширование в 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:
Настройках хоста:
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 SetHandler application/x-httpd-php SetHandler application/x-httpd-php-source 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:." 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:." 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 Options -ExecCGI php_admin_flag engine on php_admin_flag engine on php_admin_flag engine on
Настройки 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 127.0.0.1:8080; proxy_redirect 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 127.0.0.1:8080; proxy_redirect 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. Это уже не первый вопрос на эту тему здесь. Копаем по крупицам… Когда найдется решение, опишу ему в других своих вопросах. Для будущих поколений так сказать…
Заранее Спасибо, хотя бы за то, что прочитали :)
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:
Настройках хоста:
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 SetHandler application/x-httpd-php SetHandler application/x-httpd-php-source 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:." 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:." 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 Options -ExecCGI php_admin_flag engine on php_admin_flag engine on php_admin_flag engine on
Настройки 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 127.0.0.1:8080; proxy_redirect 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 127.0.0.1:8080; proxy_redirect 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. Это уже не первый вопрос на эту тему здесь. Копаем по крупицам… Когда найдется решение, опишу ему в других своих вопросах. Для будущих поколений так сказать…
Заранее Спасибо, хотя бы за то, что прочитали :)
Похожие публикации
Как бы так сделать - зеркало сайта
Вопрос о корректности отключения сервака по абузе
не судите, подскажите чайнику
Периодически выскакивает 403 ошибка
Что делать - выскакивает сообщение о превышении лимита кол-ва подключений!?
Нет комментариев