1. HTTP缓存设置
ExpiresActive On #ExpiresDefault 设置全局缓存时间,将导致一些get请求不能连续执行
#ExpiresDefault "access plus 0 days" ExpiresByType application/* "access plus 30 days"
ExpiresByType image/css "access plus 30 days"
ExpiresByType text/css "access plus 30 days"
access 表示以客户端访问资源的时间为基准;
modification 表示以以资源最后修改的时间作为计算的基准;
2. 关闭Last-Modified
#关闭html|gif|jpg|png的Last-Modified
LoadModule headers_module modules/mod_headers.so <FilesMatch "\.(html|gif|jpg|png)">
Header unset Last-Modified
</FilesMatch>
3. 关闭Etag
FileETag None Header unsets ETag
Last-Modified与ETag,都是用来标识一个资源是否更改过。
Last-Modified的值是资源的时间戳,如果按F5或者刷新按钮则If-Modified-Since头会带着时间戳发送到服务器,如果服务器上资源的最后修改时间<=这个时间,那么返回304 Not Modified,否则返回200 OK 以及新的资源;
ETag的值是通过资源的信息计算出来的一个字符串,如果按F5或者刷新按钮则If-None- Match头会带着这个值发送到服务器,服务器用这个值来和当前资源的值进行比对,如果相等,则返回304 Not Modified,否则返回200 OK 以及新的资源。
默认情况下Apache对静态资源会发送Last-Modified和ETage,但是由于ETage的计算会耗费服务器的CPU资源,所以选择关掉,只开启Last-Modified。
4. 开启Gzip压缩,设置vary头
LoadModule deflate_module modules/mod_deflate.so #js,html,xml,css,普通文本开启Gzip压缩
AddOutputFilterByType DEFLATE application/x-javascript text/html text/plain text/xml text/css
Gzip会对文本资源进行压缩,一般能节省40%的大小,二进制内容不需要开启Gzip压缩,因为这些文件是已经压缩过的,如果再进行Gzip压缩反而会 增加其大小。静态资源一般都会在代理服务器上进行缓存,而有的浏览器支持Gzip,但是也有不支持Gzip的旧浏览器,所以需要设置Vary: Accept-Encoding 头,这个头告诉代理缓存服务器要对资源缓存两份,一份压缩过的,一份没有压缩过,然后根据浏览器发送的Accept-Encoding头来返回压缩或者不压缩的内容。
5. HTTPS、Websocket代理
httpd.conf
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so #apache2.2.5以上,专用来做websocket代理
httpd-ssl.conf
SSLProxyEngine on
ProxyRequests off SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off ProxyPass /socket.io/ws/ wss://127.0.0.1:60002/socket.io/
ProxyPassReverse /socket.io/ws/ wss://127.0.0.1:60002/socket.io/ ProxyPass /socket.io/ https://127.0.0.1:60002/socket.io/
ProxyPassReverse /socket.io/ https://127.0.0.1:60002/socket.io/