Author |
|
bagu
Joined: 06 Jan 2011 Posts: 193 Location: France
|
Posted: Fri 22 May '20 10:10 Post subject: Better cache config for Apache |
|
|
Hello,
Since I have a very small internet connection, I am looking to optimize the management of the Apache cache.
Here is my configuration:
Code: | # Configuration de l'expiration des headers
ExpiresActive on
ExpiresDefault "access plus 12 month"
ExpiresByType image/gif "access plus 1 month"
ExpiresByType image/jpeg "access plus 1 month"
ExpiresByType image/png "access plus 1 month"
ExpiresByType image/ico "access plus 3 month"
ExpiresByType image/x-icon "access plus 3 month"
ExpiresByType text/css "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType application/x-javascript "access plus 1 month"
ExpiresByType application/javascript "access plus 1 month"
<FilesMatch "\.(ico|pdf|flv|jpe?g|png|gif|swf|js|eot)$">
ExpiresActive On
ExpiresDefault "access plus 1 month"
</FilesMatch>
<IfModule headers_module>
Header set Connection keep-alive
Header append Cache-Control "public"
Header set X-Frame-Options DENY
# When serving user-supplied content, include a X-Content-Type-Options: nosniff header along with the Content-Type: header,
# to disable content-type sniffing on some browsers.
# https://www.owasp.org/index.php/List_of ... TP_headers
# Currently supported in IE > 8 http://blogs.msdn.com/b/ie/archive/2008 ... pdate.aspx
# http://msdn.microsoft.com/en-us/library ... 41(v=vs.85).aspx
# 'soon' on Firefox https://bugzilla.mozilla.org/show_bug.cgi?id=471020
Header set X-Content-Type-Options "nosniff"
# Config to don't allow the browser to render the page inside an frame or iframe
# and avoid clickjacking http://en.wikipedia.org/wiki/Clickjacking
# if you need to allow (i)frames, you can use SAMEORIGIN or even set an uri with ALLOW-FROM uri
# https://developer.mozilla.org/en-US/doc ... me-Options
Header set X-Frame-Options "SAMEORIGIN"
# This header enables the Cross-site scripting (XSS) filter built into most recent web browsers.
# It's usually enabled by default anyway, so the role of this header is to re-enable the filter for
# this particular website if it was disabled by the user.
# https://www.owasp.org/index.php/List_of ... TP_headers
Header set X-XSS-Protection "1; mode=block"
# 1 YEAR
<FilesMatch "\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav|eot|woff)$">
Header set Cache-Control "max-age=31536000, public"
</FilesMatch>
# 1 WEEK
<FilesMatch "\.(jpg|jpeg|png|gif|swf|js|css)$">
Header set Cache-Control "max-age=2592000, public, proxy-revalidate"
</FilesMatch>
# 3 HOUR
<FilesMatch "\.(txt|xml)$">
Header set Cache-Control "max-age=10800, proxy-revalidate"
</FilesMatch>
# NEVER CACHE - notice the extra directives
<FilesMatch "\.(php|cgi|pl)$">
Header set Cache-Control "max-age=30, private, no-store, no-cache, must-revalidate"
</FilesMatch>
<FilesMatch "\.(js|css|xml|gz)$">
Header append Vary: Accept-Encoding
</FilesMatch>
</IfModule>
|
I know that the subject is vast, but, do you have any advice or comments to improve this management?
Thanks |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Fri 22 May '20 14:01 Post subject: |
|
|
You can also increase the speed using mod_deflate (I guess you already use it), TLS 1.3 to reduce SSL lookups, use mod_h[ttp]2, use mod_brotli for even better and faster compression. |
|
Back to top |
|
bagu
Joined: 06 Jan 2011 Posts: 193 Location: France
|
Posted: Fri 22 May '20 14:05 Post subject: |
|
|
Yes, i try to use everything i can
Mod deflate :
Code: | DeflateCompressionLevel 9
# Compress HTML, CSS, JavaScript, Text, XML and fonts
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/vnd.ms-fontobject
AddOutputFilterByType DEFLATE application/x-font
AddOutputFilterByType DEFLATE application/x-font-opentype
AddOutputFilterByType DEFLATE application/x-font-otf
AddOutputFilterByType DEFLATE application/x-font-truetype
AddOutputFilterByType DEFLATE application/x-font-ttf
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/x-httpd-fastphp
AddOutputFilterByType DEFLATE application/x-httpd-php
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/atom_xml
AddOutputFilterByType DEFLATE font/opentype
AddOutputFilterByType DEFLATE font/otf
AddOutputFilterByType DEFLATE font/ttf
AddOutputFilterByType DEFLATE font/eot
AddOutputFilterByType DEFLATE image/svg+xml
AddOutputFilterByType DEFLATE image/x-icon
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
# Remove browser bugs (only needed for really old browsers)
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
Header append Vary User-Agent
# Don't compress binaries
SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|iso|tar|bz2|sit|rar) no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|jpg|ico|png) no-gzip dont-vary
SetEnvIfNoCase Request_URI .(?:pdf|avi|mov|mp3|mp4|rm|doc|xls)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI .flv no-gzip dont-vary
# Pour les proxies
Header append Vary User-Agent env=!dont-vary
SetOutputFilter DEFLATE
<IfModule brotli_module>
SetOutputFilter BROTLI_COMPRESS;DEFLATE
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|jpg|png|zip|pdf|rar)$ no-gzip no-brotli dont-vary
</IfModule>
<ifModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_add_header_count Yes
mod_gzip_send_vary Yes
mod_gzip_item_include file .(html?|xml|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude mime ^image/.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</ifModule> |
Mod H2 :
Code: | <IfModule h2_module>
# This can also set to "off" and turned on only for specific virtual hosts
H2Engine on
Protocols h2c http/1.1
</IfModule> |
Mod brotli is on, but without any special config.
But, for TLS 1.3, i don't know what to do to use it. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
|
Back to top |
|
bagu
Joined: 06 Jan 2011 Posts: 193 Location: France
|
Posted: Sun 24 May '20 23:49 Post subject: |
|
|
Interesting, i only add this :
Code: | SSLOptions +StrictRequire +StdEnvVars -ExportCertData
SSLCipherSuite SSL ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384
SSLCipherSuite TLSv1.3 TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384
SSLOpenSSLConfCmd ECDHParameters secp384r1
SSLOpenSSLConfCmd Curves sect571r1:sect571k1:secp521r1:sect409k1:sect409r1:secp384r1:sect283k1:sect283r1:secp256k1:prime256v1 |
Because everything else was already in my config. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Tue 26 May '20 13:38 Post subject: |
|
|
I has been a long time and I don't know why, but instead of the Expires* I switched to
Code: | FileETag MTime Size |
|
|
Back to top |
|
bagu
Joined: 06 Jan 2011 Posts: 193 Location: France
|
Posted: Tue 26 May '20 13:42 Post subject: |
|
|
It's a bit strange because I saw everywhere that it was better to deactivate Etag.
I used it before, but I fired it to use Expires.
But i don't know why expires would be better. |
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
|
Back to top |
|
bagu
Joined: 06 Jan 2011 Posts: 193 Location: France
|
|
Back to top |
|
James Blond Moderator
Joined: 19 Jan 2006 Posts: 7371 Location: Germany, Next to Hamburg
|
Posted: Tue 26 May '20 15:47 Post subject: |
|
|
That is true, but mostly I don't use CDN for my websites. Sometimes I use a load balancer, but then there is a SAN attached, so the ETAG is still the same. |
|
Back to top |
|