Apache HTTP Server �汾2.2
��ƪ�ĵ��Ƕ�mod_cache
��mod_disk_cache
��mod_mem_cache
��mod_file_cache
��htcacheclean�ο��ĵ����ݵ����������������������Apache�Ļ�������������web�ʹ���(proxy)����ͬʱ����һЩ��������������ô���
��Apache2.2��mod_cache
��mod_file_cache
������������ģ�飬�����Ѿ��㹻�ȶ�����������ʵ���������ˡ���Щ������ϵ�ṩ��һ��ǿ������;��������ԭʼweb������(origin webserver)�ʹ��������(proxy)��HTTP�����ٶȡ�
mod_cache
�Լ�����֧��ģ��mod_mem_cache
��mod_disk_cache
�ṩ�����ܵ�HTTP���塣����(content)�����洢�ڻ������У�mod_cache
��Ŀ�����ڹ���������ݻ��������ĸ���HTTPͷ��ѡ�������ͬʱ�����ص����ݺʹ�������ݡ�mod_cache
�����Ϊͬʱ��Լĺ��ӵĻ������ã������ڴ����������ݡ���̬�ı������ݡ�������ٷ��ʵ���ʱ����ı䱾���ļ���
��һ���棬mod_file_cache
ʵ����һ���������ġ�������ijЩ����¸���Ч�Ļ�����ʽ��������������ȷ��URL�������������ά�������ԣ�mod_file_cache
ͨ���ṩ�ļ����(file-handle)���ڴ�ӳ��(memory-mapping)�ļ�����ά��һ����Apache���һ�������������ļ���������ͬ���أ�mod_file_cache
��Ŀ���Ǹ��Ʋ����ĵı��ؾ�̬�ļ��ķ���ʱ�䡣
����mod_file_cache
�ṩ��һ����ԼĻ���ʵ�֣�����CacheFile
��MMapStatic
�ĵ����ض�����֮�⣬��ƪָ�ϵ�˵��������mod_cache
�Ļ�����ϵ�ṹ��
Ϊ�˸��õ������ƪ�ĵ�����Ӧ����ϤHTTP�Ļ���֪ʶ�������Ѿ��Ķ�����URL���ļ�ϵͳ��ӳ��������Э������ƪ�û�ָ�ϡ�
���ģ�� | ���ָ�� |
---|---|
��һ��������������У�mod_cache
�ڿ��ܻᷢ��������Ҫ�Ρ����ȣ�mod_cache
����һ��URLӳ��ģ�飬Ҳ����˵�����һ��URL�Ѿ������沢�����������δʧЧ����������mod_cache
ֱ�Ӵ���
��Ҳ��ζ���ڴ���һ������ʱͨ����Ҫ�����������Σ�������mod_proxy
��mod_rewrite
����ĽΣ������ᷢ���������������ǽ����ݻ��������Ĺؼ����ڡ�[��ȻijЩ�α�ʡ���ˣ������������û������Եij��ԣ����ٴ�����������ٶȡ�]
������URL���ڻ����У�mod_cache
����������Ĵ�����������һ������������Apacheʹ��ͨ���ķ�����λ����֮�ù��������������ݱ����ڷ����Ժ����С���������ݱ�ȷ��Ϊ���Ի��棬��ô�����������ڻ��������Ա�Ϊ�����������ṩ����
�����URL�����ڻ����в����Ѿ�ʧЧ�Ļ����ù�����ͬ���ᱻ��ӣ�����mod_cache
����ͬʱ����(backend)�ύһ������������ȷ������İ汾�Ƿ��ǵ�ǰ�����°汾����������°汾����ô����Ԫ��Ϣ(meta-information)���ᱻ���²���ʹ���������İ汾�������ڸ���������������°汾����ô��������ʹ�øղ�Ϊ�����ṩ������������ݸ��»��档
�ڻ��汾�����ɵ����ݵ�ʱ��UseCanonicalName
ָ������Ϊ On
�������������������ʡ���������Ϊ�������ṩ���ݵ������������������ǻ����(cache key)����ɲ��֡�����ָ������Ϊ On
ʱ�����ж������������������������������������ͬ�Ļ���ʵ�壬���ǰ��ո��ԵĹ淶������(canonical hostname)���洢��
���ڻ��淢���ڽ�URLӳ�䵽�ļ�ϵͳ�ĽΣ�������ĵ���ֻ��������Ӧ��URL������ͨ���������ûʲô�ش����壬���ǵ���ʹ������˰���(Server Side Includes)ʱ����һ�㽫�Ե��ر���Ҫ��
<!-- ����İ������Ա����� --> <!--#include virtual="/footer.html" --> <!-- ����İ��������Ա����� --> <!--#include file="/path/to/footer.html" -->
�����ʹ�÷���˰���(SSI)������ϣ���ӻ����л�ÿ��ٷ���ô�����Ӧ��ʹ��virtual
���͵İ�����
����ʵ���Ĭ��ʧЧ������һ��Сʱ(3600��)����Ȼ�����������ͨ��CacheDefaultExpire
ָ�����ġ����Ĭ��ֵ�������ڲ������ݵ�ԭʼ��Դû����ȷָ��ʧЧʱ��������ʱ�������¡�
���һ��Ӧ��û�а���Expires
ͷ��ȴ����Last-Modified
ͷʱ��mod_cache
���Ը���CacheLastModifiedFactor
ָ���ƶϳ�ʧЧ���ڡ�
���ڱ������ݣ�mod_expires
������������ʧЧ���ڡ�
ʧЧ���ڵ����ֵ������ͨ��CacheMaxExpire
ָ�������ơ�
�����������ʧЧ���ұ��Ӻ��(backend)�������ṩ��(content provider)�������������ʱ��Apache����ֱ�Ӵ���ԭʼ��������ʹ��һ����������(conditional request)��
HTTPЭ��ʹ�õ�һЩͷ(header)����ͻ��˻�������ͬһ�����ݵIJ�ͬ�汾�����磬���һ����ԴӦ����"Etag:"ͷ����ô�Ϳ�������һ������"If-Match:"ͷ�������������һ����ԴӦ����"Last-Modified:"ͷ����ô�Ϳ�������һ������"If-Modified-Since:"ͷ���������ȵȡ�
������������������Ӧ��IJ�ͬȡ���������Ƿ�ƥ����Щ���������һ���������һ��"If-Modified-Since:"ͷ���������������ָ����ʱ��֮��δ�����ı䣬��ôһ������"304 Not Modified"Ӧ��Ϳ����ˡ�
�������������Ѿ��仯����ô������ԭ��û�������������ͨ��ʽ��Ӧ��
�ͻ�����ص���������ĺô����������档���ȣ��������ύ��������������ʱ������Ӻ�˻�õ�������洢��������ƥ��(�������ȷ��)���Ϳ��Ա������ڴ���ȫ����Դ�������Ŀ�����
��Σ���������ͨ��ֻ�ú�˻��ѽ�С�Ŀ��������ھ�̬�ļ���ͨ�����еĿ�������һ��stat()
�����Ƶ�ϵͳ������ȷ�����ļ��Ĵ�С�Ƿ�仯�Լ������ʱ�䡣����������������������δ�仯��������Apache����ı��������Ѿ�ʧЧ������£���Ȼ���Դӻ������п���ȡ���Է���������ֻҪ�ӻ�������ȡ�ȴӺ�˶�ȡ����(������ڴ滺������ȡ�ͱȴ�Ӳ���϶�ȡ����)��
��ǰ������Apache�еĻ���������ֲ�ͬ������ʽ��mod_file_cache
�Ļ���������ά��Apache����ʱ���ļ����ݡ���һ�������ڸ�ģ�黺�����е��ļ�������ʱ�����������ز��û������е�����Ϊ���ṩ����
mod_cache
�Ļ�������Զ��Խ�Ϊ���ӡ���������һ������ʱ���������ǰ��δ�����棬��ģ�齫���жϸ������Ƿ���Ա����档�ж�Ӧ��Ļ�������(cachability)��������������
CacheEnable
��CacheDisable
ָ�CacheIgnoreNoLastMod
ָ������Ӧ�������ٰ���һ��"Etag"��"Last-Modified"��"Expires"ͷ���ܱ����档CacheStorePrivate
ָ����������档CacheStoreNoStore
ָ����������档�����֮����ʱ��仯�����ݲ�Ӧ�ñ����棻ȡ�����ض���������ݲ�Ӧ�ñ����棻�����ڲ���HTTP����Э�̴�������������Ҳ��Ӧ�ñ����档[���䷭��ĺ�û���գ�ԭ�ģ�In short, any content which is highly time-sensitive, or which varies depending on the particulars of the request that are not covered by HTTP negotiation, should not be cached.]
�������ijЩ��̬���ݣ����ǵı仯�������������ߵ�IP��ַ���߲��ÿ5���Ӿͻᷢ���ı䣬��ô��Щ���ݺ��������Dz�Ӧ�ñ�����ġ�
��һ���棬������ݵı仯�����ڸ���HTTPͷ���������ǵ�����������ͨ��ʹ��"Vary"ͷ���л��档
��mod_cache
���յ�һ����˷����ġ�����"Vary"ͷ��Ӧ���ʱ���������������ܵĴ�����������л��ᣬmod_cache
������֮�����������"Vary"ͷ���ԣ�Ȼ������ȷ�Ļ���������Ϊ��������ṩ����
�ٸ�������˵�����յ�һ����������"Vary"ͷ��Ӧ��
Vary: negotiate,accept-language,accept-charset
mod_cache
��ֻ��ʹ����ԭʼ�����accept-language��accept-charsetͷƥ��Ļ����������ṩ����
mod_cache
�dz���һ�����õķ������(reverse-proxy)�����DZ���Ҫ�����ύ������ģ�齫ֱ��Ϊ�����ṩ�����ڻ��屾����Դ������ģʽ���ı���Apache�İ�ȫģ�͡�
��Ϊ�����ļ�ϵͳ��Ŀ¼�ṹ��Ѱ�ҿ��ܴ��ڵ�.htaccess
�ļ���һ�������dz�����IJ����������ֵص����˻����������ĺô�(��������)������mod_cache
������黺���е�ʵ���Ƿ�����(authorised)�����ṩ�����仰˵��ֻҪmod_cache
�л����������δʧЧ����ô���ǽ���ֱ������Ϊ�����ṩ����
������˵�������Ϊij����Դ����IP��ַ�����˷�����ɣ������Ҫȷ����Щ���ݲ������档�����ʹ��CacheDisable
ָ���mod_expires
ģ��ﵽ���Ŀ�ġ�����Ȩ����mod_cache
ģ��dz���һ����������������ݲ��û��������������IP��ַ�ϵ�����ͻ��ṩ����
��Ϊ�ն��û�����������ɻ�����ֱ���ṩ�������Ի�����������Ϊһ����Щ��ͼ���š��ƻ����ݵĹ����ߵĹ���Ŀ�ꡣ����Ҫ�ġ���Ҫ�μǵ�һ���ǣ�����������ʼ�ն�����Apache���û��ǿ�д�ġ���������ͨ����ԭ��ʼ�ձ����������ݶ�����Apache���û�����д����ȫ�෴��
�������Apache���û���DZ�ڵIJ���ȫ�û������磬ͨ��һ����©����CGI���̣����п��ܶԻ�������������ʹ��mod_disk_cache
��ʱ�ͺ����ײ�������Ļ����������ݡ�
����һ��������Apache���û��ͻ�����һ�����������͵Ĺ�����ȸ���Σ�յİ�ȫ���������������ʹ��mod_disk_cache
�������ʱ���μǣ�ȷ��ΪApache��ʱ�������еİ�ȫ��������ʹ��suEXEC��һ����ͬ������Apache�û��������û��������CGI���̡�
����Apache��Ϊһ�����������������е�ʱ�����ܴ���һ����ν"�����ж�"�����⡣"�����ж�"��һ�������������ָ��������ɴ���������Ӻ�̨�������������ݵĹ�����
�ٸ�������˵�����������Apache��ϵͳ��ʹ�õ�DNS������������DNS�����ж��������߽�������ƭApache���ӵ�һ������ķ�����ȥ�������ݡ���һ����������ν��HTTP������˽(request-smuggling)������
��ƪ�ĵ�����������̽��HTTP������˽�ĵط�(��Ӧ��ȥ��google)������һ�������֪���������߿���ͨ������һ��������������ԭʼweb��������©�����ﵽ��ȫ���ƴ���������������������ݵ�Ŀ�ġ�
���ģ�� | ���ָ�� |
---|---|
���ļ��Ķ����������һ�������ʱ��ԭ���ر��Ǵ������ļ�ϵͳ�е��ļ���ͨ��ά��һ�������ʹ�����ļ����ļ��������Ļ�������Apache�Ϳ��Ա���������ʱ����ǰ��Apache�ṩ�����ֲ�ͬ���ļ��������ʵ�ַ�����
������Apache��������Ļ��巽ʽ����mod_file_cache
ʵ�ֵ��ļ����(file-handle)���塣ʤ�ڻ����ļ����ݱ������������ά��һ�Ŵ��ļ������������ڱ����������ļ���ʹ��CacheFile
ָ��ָ�����ļ����ļ������
CacheFile
ָ��ָʾApache������ʱ��ij���ļ�����Ϊ����֮�������ļ��ķ����ظ�ʹ������ļ������
CacheFile /usr/local/apache2/htdocs/index.html
��������ʹ�����ַ�ʽ����������ļ�����������ȷ������ϵͳ��ͬʱ���ļ��������������㹻�ġ�
��Ȼʹ��CacheFile
���ᵼ���ļ������ݱ����棬���ǽ��ᵼ����Apache�����ڼ����ж��ļ��ĸ��Ķ�������Ч�������ṩ������ļ������ݽ���Apache��������һֱ���ֲ��䡣
�����Apache�����ڼ��ļ���ɾ���ˣ�Apache�������ά��һ�����ļ�����������ʹ��Apache����ʱ�ļ����������ṩ�������ͨ��Ҳ��ζ����Ȼ�ļ��Ѿ���ɾ�������Ҳ����ļ�ϵͳ����ʾ�����������ͷŵĿռ䲢���ᱻ���ǣ�ֱ��Apache��ֹͣ���ļ����������رա�
mod_mem_cache
Ҳ�ṩ��һ���ļ�������巽��������ͨ��CacheEnable
ָ�������á�
CacheEnable fd /
��mod_cache
�ķ�����ȣ����ַ����������ܣ���������ʧЧ�Ժ���Ӧ�ľ�������ٱ�ά����
���ģ�� | ���ָ�� |
---|---|
ֱ�Ӵ�ϵͳ���ڴ����ṩ����ͨ����ȡ�÷�����������ٵķ�������һ�����̿�������ȡ�ļ������߸������Ǵ�Զ�������ȡ�ļ������ٶ�Ҫ���ϼ��������������̿�����ͨ���漰������������������Ҫ��������������������ڴ�ͨ������ֻ��Ҫ������ʱ�䡣
�ڴ�Ҳ����Ŀǰ��λ�ֽ����Ĵ洢������֤����ַ������÷dz���Ҫ�����ļ��������ڴ��н�����ϵͳ�����ڴ�ļ��١��������ǽ�Ҫ�����ģ��ڲ���ϵͳ�����ڴ滺����������£��ⲻ��һ�������⡣���ǵ�ʹ��Apache�Լ����ڴ滺����������£�ȷ��û��Ϊ����������̫����ڴ���Ե�ʮ����Ҫ��������ϵͳ����ʹ��swap(�����ڴ�/������)������ܻᵼ�����ܼ����½���
���������ִ��IJ���ϵͳ�����ں�ֱ�ӹ����ļ��������ڴ��еĻ��塣����һ��ǿ���������ԣ������ڼ���̶��ϲ���ϵͳ���ķdz��á�������Linuxϵͳ�ϣ������ǿ�����һ�ζ�ȡһ���ļ��͵ڶ��ζ�ȡͬ�����ļ�����Ҫ��ʱ�䣺
colm@coroebus:~$ time cat testfile > /dev/null real 0m0.065s user 0m0.000s sys 0m0.001s colm@coroebus:~$ time cat testfile > /dev/null real 0m0.003s user 0m0.003s sys 0m0.000s
��ʹ����������һ��С�ļ������ζ�ȡ��ʱ�����Ҳʮ�־��ˡ����������ں����ڴ��л������ļ������ݡ�
ͨ��ȷ�������ϵͳ��ʼ�մ���"�����"�ڴ棬��Ϳ���ȷ������Խ��Խ����ļ����ݱ�����������������С�����һ���dz���Ч���ڴ滺��;�������Ҹ��������Apache�����κζ�������á�
���⣬���ڲ���ϵͳ֪���ļ���ʱ���Ļ�ɾ���ˣ����Ϳ����Զ��Ĵ��ڴ滺������ɾ��ʧЧ���ļ����ݡ�����һ������Apache������ڴ滺�����ľ��ŵ㣬��ΪApache����֪�ļ����Ļ�ɾ������Ϣ��
���ܲ���ϵͳ�Զ�����Ļ������������ܺͶ�Ϥ�ļ�״̬�����ƣ�������ijЩ�����Apache�Լ����ڴ滺��ȴ������Ч��
���ȣ�����ϵͳֻ�ܻ������Լ�֪�����ļ�������㽫Apache����һ��������������У���ôApache���Ի���DZ����ļ�������㻹��Ҫ��ƥ�е��ڴ滺���ٶȣ�Ҳ����ʹ��Apache�Լ����ڴ滺������
mod_file_cache
�ṩ��MMapStatic
ָ�������ָʾApache������ʱ��һ����̬�ļ�������ӳ�䵽�ڴ���(ʹ��mmap()ϵͳ����)��Apache����ʹ���ڴ��л����������Ϊ����������ļ��ķ����ṩ���ݡ�
MMapStatic /usr/local/apache2/htdocs/index.html
ʹ����CacheFile
ָ���Ժ���Apache�����ڼ䣬����Щ�ļ��������κ��Ķ�������Ч��
MMapStatic
ָ���������ռ���˶����ڴ棬���������ȷ����Ҫ�����������ָ�ÿ��Apache�ӽ��̶��������ⲿ���ڴ棬���Էdz���Ҫ��һ���������ȷ����ӳ����ļ�����ռ��̫����ڴ棬�����ڲ���ϵͳ���ò�ʹ�ý������������ڴ档
mod_mem_cache
�ṩ��һ�����ܵ�HTTP�ڴ滺�巽������ͬʱҲֱ��ʹ�ö��ڴ棬��Ҳ��ζ�ż�ʹMMap������IJ���ϵͳ��֧�֣�mod_mem_cache
��Ȼ�ܹ�ʵ�ֻ��塣
�������͵Ļ������ͨ�����·������ã�
# �����ڴ滺�� CacheEnable mem / # ���������Ĵ�С����Ϊ 1 MB MCacheSize 1024
���ģ�� | ���ָ�� |
---|---|
mod_disk_cache
Ϊmod_cache
�ṩ��һ�����ڴ��̵Ļ�����ơ���mod_mem_cache
һ��������һ�����ܻ��壬���ڻ�������û��ʧЧ������²Ŵӻ��������ṩ����
ͨ�������ģ�齫�����·�ʽ�������ã�
CacheRoot /var/cache/apache/ CacheEnable disk / CacheDirLevels 2 CacheDirLength 1
��ע�⣬��Ϊ������λ�ڱ��ش����ϣ����Բ���ϵͳ���ڴ滺����ͨ�������ǵķ���Ҳ��Ч��������Ȼ��Щ�ļ����洢�ڱ��ش����ϣ�������Щ�ļ���Ƶ���ķ��ʣ���ô�ܿ��ܲ���ϵͳ�Ѿ������DZ������ڴ����ˡ�
Ҫ����Ŀ�����ڻ������У�mod_disk_cache
��Ϊ�������URL����һ��22�ַ��Ĺ�ϣֵ���ù�ϣֵ�����˸�URL����������Э�顢�˿ڡ�·����CGI��������ȷ�����URL���ᷢ����ײ��
��22���ַ���ȡֵ��Χ��64����ͬ���ַ�������ζ����������22^64�ֿ��ܵ�ȡֵ�����磬һ��URL�Ĺ�ϣֵ�����ǣ�xyTGxSMO2b68mBCykqkp1w
�������ϣֵ�������������ж�Ӧ���Ǹ�URL���ļ���ǰ���������ȣ������ϣֵ��������CacheDirLevels
��CacheDirLength
ָ��ֽ��ÿһ��Ŀ¼����
CacheDirLevels
ָ������Ŀ¼�IJ�����CacheDirLength
ָ����ÿ����Ŀ¼�����ַ�����ʹ���������ӵ����ã������ϣֵ����ת���������ļ���ǰ��/var/cache/apache/x/y/TGxSMO2b68mBCykqkp1w
��
ʹ�����ּ���������Ŀ���Ǽ���ij���ض�Ŀ¼����Ŀ¼���ļ��ĸ�������Ϊ�������ļ�ϵͳ����Ŀ¼���ļ������������µķ����ٶȶ������ۿۡ���CacheDirLength
����Ϊ"1"��ʹ������һ��Ŀ¼�µ���Ŀ¼�������ᳬ��64����Ϊ��Ϊ"2"��Ϊ64*64���������ơ���������һ���dz��õ����ɣ�����"1"����CacheDirLength
ָ����Ƽ�ֵ��
�������CacheDirLevels
ָ���ֵȡ������Ԥ�Ƶ������ڻ������б�����ٸ��ļ�������ʾ��ʹ�õ�"2"���ᵼ�´�Լ����4096����Ŀ¼���ձ���������Լ100����ļ������棬��Լƽ��ÿ���ļ��д洢245��URL�����ļ���
ÿ��URL�ڻ����������ٻ�ʹ�������ļ���ͨ����һ���ǰ�����URLԪ��Ϣ(meta-information)��".header"�ļ��������ʱʧЧ����һ����".data"�ļ��������˰��ֽڸ��Ƶ�����ΪURL�ṩ��������ݡ�
��ͨ��ʹ��"Vary"ͷ��������Э�̵�����£�����Ϊ��URL����һ��".vary"Ŀ¼����Ŀ¼�½��ᱣ�����ʺϲ�ͬЭ�����ݵ�".data"�ļ���
��Ȼmod_disk_cache
����ɾ����������ʧЧ���ļ�����������������ά�������������ܹ�����Ӧ��ռ�ݶ��ռ��Լ�����Ҫ��������ʣ��ռ䡣
��Ϊ�ֲ���Apache������һ��htcacheclean���ߣ���������������ֲµ��ģ������������Ե�����������ȷ��htcacheclean������Ƶ���Լ�������Ӧ��ռ�ж��Ĵ��̿ռ���һ�����ӵ����顣����Ҫ������γ��Ժ����ڲ����ҵ�һ�����ֵ��
htcacheclean����������ģ�͡�һ������Ϊ��̨�ػ��������У�������cron�����Եĵ��á�htcacheclean����ʹ��һ��Сʱ������ʱ��������dz����(��ʮG)�������������������ʹ��cron���������Ļ������������һ�¶ʱ������һ�αȽϺ��ʣ��Ա�����ͬһʱ�����ж��ʵ����
ͼ1: һ�����͵Ļ��������������������
��Ϊmod_disk_cache
ģ�����������ľ���ʵ��ʹ���˶��ٴ��̿ռ䣬���������ȷ��htcacheclean������Ϊ�������˻������Ժ�Ԥ�����㹻���"�����ռ�"��