在Apache配置中优化静态文件服务可以通过以下几个方面来实现:
启用Gzip压缩可以显著减少传输的数据量,从而加快页面加载速度。
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css application/javascript
</IfModule>
通过设置缓存头,可以让浏览器缓存静态文件,减少重复请求。
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
<IfModule mod_headers.c>
Header set Cache-Control "max-age=31536000, public"
</IfModule>
KeepAlive允许客户端在一个TCP连接上发送多个请求,减少了建立和关闭连接的开销。
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
确保静态文件尽可能小,可以通过压缩图片、合并CSS和JavaScript文件等方式来减少文件大小。
内容分发网络(CDN)可以将静态文件缓存到全球各地的服务器上,用户可以从最近的服务器获取文件,从而加快访问速度。
确保Apache正确配置了所有静态文件的MIME类型。
AddType image/png .png
AddType image/jpeg .jpg
AddType image/gif .gif
AddType text/css .css
AddType application/javascript .js
AddType text/html .html .htm
禁用不需要的模块可以减少Apache的内存和CPU使用。
# 禁用不必要的模块
LoadModule dummy_module modules/mod_dummy.so
mod_deflate压缩大文件对于非常大的文件,可以使用mod_deflate进行压缩。
<IfModule mod_deflate.c>
SetOutputFilter DEFLATE
DeflateCompressionLevel 9
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary
SetEnvIfNoCase Request_URI \.pdf$ no-gzip dont-vary
</IfModule>
mod_expires设置过期时间确保静态文件的过期时间设置合理,以便浏览器可以缓存文件。
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType text/css "access plus 1 month"
ExpiresByType application/pdf "access plus 1 month"
ExpiresByType text/x-javascript "access plus 1 month"
ExpiresByType application/x-shockwave-flash "access plus 1 month"
ExpiresByType image/x-icon "access plus 1 year"
ExpiresDefault "access plus 2 days"
</IfModule>
mod_headers设置缓存控制头确保浏览器可以缓存静态文件。
<IfModule mod_headers.c>
Header set Cache-Control "max-age=31536000, public"
</IfModule>
通过以上这些优化措施,可以显著提高Apache服务器上静态文件服务的性能。