`
isiqi
  • 浏览: 16561627 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Apache学习笔记 车东

阅读更多

Apache学习笔记

作者: 车东 Email: chedongATbigfoot.com/chedongATchedong.com

写于:2002/07 最后更新: 09/09/2006 17:09:05
Feed Back >>(Read this before you ask question)
Creative Commons License

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
http://www.chedong.com/tech/apache_install.html

关键词: apache install php resin mod_gzip mod_expire webalizer cronolog

内容摘要:

Apache是一个历史悠久并且功能十分强大的WEB服务器,但其丰富的功能对于一个新手来说往往不知道从何下手。我个人感觉Apache的设计充分体现了模块化设计的优势,通过在动态模块加载(DSO)模式下的安装,任何子应用模块都可以通过配置文件的简单修改进行积木式的灵活配置。安装的过程可以从简单的静态html服务开始,一个模块一个模块的学习使用。从单纯的HTML静态服务(core),到复杂的动态页面服务(core + php, core + resin, core + php + mod_gzip, core + resin + mod_expire)。

本文主要从简化安装==>性能调优==>维护方便的角度,介绍了WEB服务的规划、HTTPD安装/应用模块配置、升级/维护等过程。让Apache和PHP,Resin等应用模块的独立升级,完全互不影响。

  1. WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
  2. Apache安装过程:apache的通用的简化安装选项,方便以后的应用的模块化配置;
    修改 HARD_SERVER_LIMIT:
    vi /path/to/apache_src/src/include/httpd.h
    #define HARD_SERVER_LIMIT 2560 <===将原来的 HARD_SERVER_LIMIT 256 后面加个“0”
    apache编译:
    ./configure --prefix=/home/apache --enable-shared=max --enable-module=most
  3. 可选应用模块/工具的安装:php resin mod_gzip mod_expire及各个模块之间的配合;
    mod_php安装:./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
    mod_resin安装:./configure --with-apxs=/home/apache/bin/apxs
    mod_gzip安装:修改Makefile中的 apxs路径:然后make make install
    工具:日志轮循工具cronolog安装:http://www.cronolog.org
  4. 升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
    按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
    系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
    应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpd.conf中相关的配置。
    系统升级:系统管理员:升级操作系统/升级Apache
    应用升级:应用管理员:升级应用模块,PHP Resin等。

WEB应用的容量规划

Apache主要是一个内存消耗型的服务应用,我个人总结的经验公式:
apache_max_process_with_good_perfermance < (total_hardware_memory / apache_memory_per_process ) * 2
apache_max_process = apache_max_process_with_good_perfermance * 1.5

为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的1.7倍,因为Apache本身会因为进程过多导致性能下降。

例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) * 2 = 500
apache_max_process = 500 * 1.5 = 750
所以规划你的应用让服务尽量跑在500个进程以下以保持比较高的效率,并设置Apache的软上限在800个。

例子2:
一个apache + mod_resin的服务器: 一个apache进程一般需要2M内存
在一个2G内存的机器上:
apache_max_process_with_good_perfermance < (2g / 2m ) * 2 = 2000
apache_max_process = 2000 * 1.5 = 3000

以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。

Apache安装过程

服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_1.3.xx/src/include/httpd.h
#ifndef HARD_SERVER_LIMIT
#ifdef WIN32
#define HARD_SERVER_LIMIT 1024
#elif defined(NETWARE)
#define HARD_SERVER_LIMIT 2048
#else
#define HARD_SERVER_LIMIT 2560 <===将原来的HARD_SERVER_LIMIT 256 后面加个“0”
#endif
#endif

解释:
Apache缺省的最大用户数是256个:这个配置对于服务器内存还是256M左右的时代是一个非常好的缺省设置,但随着内存成本的急剧下降,现在大型站点的服务器内存配置一般比当时要高一个数量级不止。所以256个进程的硬限制对于一台1G内存的机器来说是太浪费了,而且Apache的软上限 max_client是受限于HARD_SERVER_LIMIT的,因此如果WEB服务器内存大于256M,都应该调高Apache的 HARD_SERVER_LIMIT。根据个人的经验:2560已经可以满足大部分小于2G内存的服务器的容量规划了(Apache的软上限的规划请看后面)。

Apache的编译:以下通用的编译选项能满足以后任意模块的安装
./configure --prefix=/another_driver/apache/ --enable-shared=max --enable-module=most
比如:
./configure --prefix=/home/apache/ --enable-shared=max --enable-module=most

解释:
--prefix=/another_driver/apache/:建议将apache服务安装在另外一个驱动设备上的目的在于硬盘往往是一个系统使用寿命最低的设备,因此:将服务数据和系统完全分开,不仅能提高了数据的访问速度,更重要的,大大方便系统升级,应用备份和恢复过程。

--shared-module=max:使用动态加载方式载入子模块会带来5%的性能下降,但和带来的配置方便相比更本不算什么:比如模块升级方便,系统升级风险降低,安装过程标准化等

--enable-module=most:用most可以将一些不常用的module编译进来,比如后面讲到的mod_expire是就不在 apache的缺省常用模块中

如果不想build so, 也可以这样:
./configure \
"--with-layout=Apache" \
"--prefix=/path/to/apache" \
"--disable-module=access" \
"--disable-module=actions" \
"--disable-module=autoindex" \
"--disable-module=env" \
"--disable-module=imap" \
"--disable-module=negotiation" \
"--disable-module=setenvif" \
"--disable-module=status" \
"--disable-module=userdir" \
"--disable-module=cgi" \
"--disable-module=include" \
"--disable-module=auth" \
"--disable-module=asis"

但结果会发现,这样编译对服务性能只能有微小的提高(5%左右),但却失去了以后系统升级和模块升级的灵活性,无论是模块还是Apache本身升级都必须把Apache和PHP的SOURCE加在一起重新编译。

apache的缺省配置文件一般比较大:可以使用去掉注释的方法精简一下:然后再进入具体的培植过程能让你更快的定制出你所需要的。
grep -v "#" httpd.conf.default >httpd.conf

需要修改的通用项目有以下几个:

#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80

#服务器名:缺省没有
ServerName name.example.com

#最大服务进程数:根据服务容量预测设置
MaxClients 256 => 800

#缺省启动服务后的服务进程数:等服务比较平稳后,按平均负载下的httpd个数设置就可以
StartServers 5 => 200

不要修改:
以前有建议说修改:
MinSpareServers 5 => 100
MaxSpareServers 10 => 200

但从我的经验看来:缺省值已经是非常优化的了,而且让Apache自己调整子共享进程个数还是比较好的。

特别修改:
在solaris或一些比较容易出现内存泄露的应用上:
MaxRequestsPerChild 0 =>3000

应用模块和工具的安装配置:

由于使用模块动态加载的模式,所以可以方便的通过简单的配置调整来把Apache定制成你需要的:最好把不常用模块全部清除(无论处于安全还是效率)。
比如:对于静态页面服务器:就什么其他子模块都不加载,对于PHP应用就加上PHP模块,对于JAVA应用就把Resin模块加载上。而且各种模块的插拔非常简单,这样调试过程中就可以简单的通过注释掉不需要的模块,而不用重新编译。

一般说来,可以不需要的模块包括:
#LoadModule env_module libexec/mod_env.so
#LoadModule negotiation_module libexec/mod_negotiation.so
#LoadModule status_module libexec/mod_status.so
#server side include已经过时了
#LoadModule includes_module libexec/mod_include.so
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindex.so
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgi.so
#LoadModule asis_module libexec/mod_asis.so
#LoadModule imap_module libexec/mod_imap.so
#LoadModule action_module libexec/mod_actions.so
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_access.so
#LoadModule auth_module libexec/mod_auth.so
#LoadModule setenvif_module libexec/mod_setenvif.so

最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_config.so
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mime.so
#用于缺省index文件:index.php等
LoadModule dir_module libexec/mod_dir.so

可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdir.so
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadModule alias_module libexec/mod_alias.so

常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。

建议将所有MODULE的配置都放到相应模块的配置内部:<IfModule some_module.c>some_module config </IfModule>

PHP的安装:
/path/to/php_src/configure --with-apxs=/path/to/apache/bin/apxs --with-other-modules-you-need
需要修改的配置:
AddType application/x-httpd-php .php .php3 .any_file_in_php

resin的安装设置:
/path/to/resin/src/configure --with-apxs=/path/to/apache/bin/apxs

具体的resin设置放在另外一个文件中:比如/home/resin/conf/resin.conf
<IfModule mod_caucho.c>
CauchoConfigFile /path/to/apache/conf/resin.conf
</IfModule>

mod_expires的安装配置:
<IfModule mod_expires.c>
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
</IfModule>

注释:
所有的.gif文件1个月以后过期
所有的文件缺省1天以后过期

mod_gzip的安装
http://www.chedong.com/tech/compress.html

日志的轮循:cronolog的安装和设置

cronolog可以非常整齐的将日志按天轮循存储
缺省编译安装到/usr/local/bin/下,只需要将配置改成:

CustomLog "|/usr/local/sbin/cronolog /home/apache/logs/%w/access_log" combined

日志将按天截断并存放在以星期为目录名的目录下:比如:log/1是周一,log/5是周五, log/0是周日

用gzip压缩每天的日志:
30 4 * * * /usr/bin/gzip -f /home/apache/logs/`date -d yesterday +%w`/access_log

日志的定期删除:
30 5 * * */usr/bin/find /home/apache/logs/ -name access_log.gz -mtime +3 |xargs -r /bin/rm -f

升级维护

由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
<IfModule mod_name>
CONFIGURATIONS..
</IfModule>
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzip.c
就屏蔽了mod_gzip,而其他模块不首任何影响。

安装和维护过程:

  • 系统安装:系统管理员的职责就是安装系统和一个按照DSO模式安装的Apache,然后COLON。
  • 应用安装:由应用管理员负责具体应用所需要的模块并设置HTTPD。
  • 系统升级:系统管理员:升级系统/升级Apache
  • 应用升级:应用管理员:升级应用模块:PHP CAUCHO等
  • 系统备份/恢复:如果Apache不在缺省的系统盘上,只需要将Apache目录备份就可以了,遇到系统分区的硬件问题直接使用预先准备好的系统COLON,再直接将Apache所在物理盘恢复就行了。
系统管理员:Apache的最简化安装 OS + Apache (httpd core only)
应用管理员:应用模块定制 纯静态页面服务
core
PHP动态页面
core+so
+php
JAVA应用
core+so
+caucho
+ssl
应用例子: www.example.com
image.example.com
bbs.example.com mall.example.com


例子:Apache和PHP模块的独立升级。

如果Apache是按照以下方式安装:
./configure --prefix=/home/apache --enable-shared=max --enable-module=most
PHP是按照以下方式安装:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql

以后单独升级Apache的时候,仍然是:
./configure --prefix=/home/apache --enable-shared=max --enable-module=most
make
su
#/home/apache/bin/apachectl stop
#make install

单独升级php时,仍然是:
./configure --with-apxs=/home/apache/bin/apxs --enable-track-vars --with-mysql
make
su
#/home/apache/bin/apachectl stop
#make install
#/home/apache/bin/apachectl start

基于反相代理的WEB加速:
squid和mod_proxy都可以实现反相代理加速。而基于缓存的代理加速比起原有WEB服务,速度会有数量级的提升。

小提示:

Apache安装后,缺省根目录下没有但很有用的2个文件:

  • favicon.ico: favicon.ico是一个16x16的站点图标文件,如果浏览器发现有这个文件,在地址栏中会用这个图标替换调浏览器的网页图标。IE6和 MOZILLA等主流浏览器都支持这个功能。
    例如: http://www.chedong.com/favicon.ico
  • robots.txt: 用于告诉搜索引擎的爬虫程序(spider)网站那些页面可以被索引,那些不可以。
    具体说明请参考:http://www.robotstxt.org/wc/robots.html

参考文档:

Apache项目
http://httpd.apache.org

PHP
http://www.php.net

Resin
http://www.caucho.com

mod_gzip
http://sourceforge.net/projects/mod-gzip/

Cronolog
http://www.cronolog.org

mod_expires
http://httpd.apache.org/docs/mod/mod_expires.html

面向搜索引擎的CMS设计:
http://www.chedong.com/tech/cms.html

<iframe name="comment" src="http://www.chedong.com/tech/comment.html" frameborder="0" width="500" scrolling="no" height="350"></iframe>

原文出处:<a href="http://www.chedong.com/tech/apache_install.html">http://www.chedong.com/tech/apache_install.html</a>
<<返回

<<返回首页
分享到:
评论

相关推荐

    CVS使用手册

    在阅读【CVS使用手册 (笔记 by 车东).htm】和使用` cvs `命令行工具进行实践时,你会逐步掌握CVS的精髓,从而在团队开发中更高效地使用这个强大的版本控制系统。记住,理论知识结合实际操作是学习CVS的关键,不断...

    Lucene 详细教案

    这样你就告诉 lucene 我要在 c 盘的 index 目录下建立索引文件,我要使用车东老师的二分词算法做分析器、我要在这个目录下删除以前的索引或任何文件创立我的索引文件。 索引的建立有三种方式,让我一一道来: 1 ...

    《7-电工装备供应商数据采集及接口规范 第7部分:组合电器》编制说明.docx

    包括国网河南省电力公司、国网物资有限公司等多家企业和机构,以及贾云飞、车东的等为主要起草人。 4. 标准编制原则与主要内容: - 原则:遵循GB/T 1.1-2009的标准化工作导则,确保标准的统一性、协调性、适用性和...

    互动讨论汽车信息化的营销模式颠覆.pptx

    而汪栋分享了宝驾租车如何依赖大数据来管理车东和租客的信息,这些数据不仅用于平台运营,还吸引了其他企业合作,如洗车、修车和汽车零部件供应商。 汽车信息化的营销模式颠覆主要体现在以下几个方面: 1. 数据...

    2018中国SEO发展现状及前景.docx

    - **技术来源**:SEO技术主要来自网易的车东的国外翻译资料。 - **技术特点**:此时的Google排名技术较为单一,主要包括修改标题、标签、关键词加粗以及网页间的相互链接等。 ##### 第二阶段:初步发展期(2005-...

    王慧文清华宣讲会演讲概要_20200916.pdf

    真正的核心竞争力只有 2个:一是发现机会的能力,真正的机会来的时候很 容易做出成果,而机会没有来的... 二是持续学习进步的能力 ,美团的团队从社交到团购到外卖就是从什么 都没有开始,一点一点把能力培养起来的 。

    大语言模型提示注入攻击安全风险分析报告-大数据协同安全技术国家工程研究中心-2023.7.6-55页.pdf

    1. 提示和提示学习的概念:提示是指人工智能模型在执行任务时所需的输入信息,而提示学习则是指模型从已有的数据中学习和泛化的能力。 2. 大语言模型的安全风险:大语言模型存在着提示注入攻击的安全风险,该攻击...

    浙大-大模型时代:智能设计的机遇和挑战-浙江大学&阿里巴巴-2023-28页.pdf

    设计师需要学习大量抽象的设计知识,并不断在实践中转化为设计能力,进而运用在设计任务中。 二、设计知识空间 设计知识空间是设计领域的理论和实践的总体,包括设计的规律、技法、原则、方法和工具等。人类知识...

    雪球特别版——段永平投资问答录(商业逻辑篇)

    段永平:著名企业家,小霸王品牌缔造者, 步步高创始人,vivo 和 OPPO 联 合创始人,网易丁磊生命中的贵人,拼多多黄峥的人生导师...解,希望各位通过这本书能读懂段永平的商业智慧,对各位的工作学习投资能有 所帮助。

    2023年00后职场生态洞察报告-拉勾招聘.pdf

    他们善于利用数字工具和社交媒体进行交流,更倾向于在线学习和自我驱动的学习模式。他们对新技术的接纳度高,对AI、大数据等新兴领域充满好奇,愿意投身于这些前沿技术的发展。 报告还强调了00后对小规模企业的偏好...

    Scaling, emergence, and reasoning (Jason Wei, Vandy).pdf

    Emergent Abilities 是语言模型学习的结果,而不是人类 Explicitly 设计的。 什么是 Emergent Abilities? Emergent Abilities 是语言模型在 Scaling 的过程中出现的一些新能力。这些能力包括但不限于文本生成、...

    2020大众心理健康洞察报告-简单心理-2021-116页.pdf

    这种设备的出现,满足了出境旅游、国际交流、教育学习等方面对语言翻译的需求。翻译机通常被分为带屏和无屏两种类型,带屏翻译机支持拍照翻译,如网易有道、搜狗;无屏翻译机则需要配合手机app使用,如科大讯飞、...

    哈尔滨工业大学:ChatGPT调研报告.pdf

    ChatGPT相关技术包括基于Transformer的预训练语言模型、提示学习与指令精调、思维链等。这些技术的应用使得ChatGPT具有非常惊艳的语言理解、生成、知识推理能力。 知识点4:ChatGPT的优势与劣势 ChatGPT的优势包括...

    2023年AI现状报告.pdf

    报告还回顾了Air Street Capital在2022年的预测,并对2023年的预测进行了展望,其中包括DeepMind的大规模强化学习模型、英伟达在AGI领域的投资、语言模型的数据集和参数规模、生成音频工具的开发者吸引力、通用人工...

    产品经理生存报告.pdf

    9. 持续学习:IT行业和技术在不断演变,产品经理需要不断学习新的技术、工具和方法论,以适应行业的变化,并将这些新知识应用到产品开发和管理中。 10. 竞品分析:了解竞争对手的产品对于制定有效的产品策略至关...

    超全的OD工具模型大全分享.pdf

    它通常包括四个视角:财务、客户、内部流程和学习与成长,以确保组织各个方面的均衡发展。 2. 组织诊断类 - 组织复盘与改进:涉及对组织过往的业绩和活动进行回顾和评估,识别优点和不足,以便改进和调整策略。 3...

    半导体重点纪要合集(纳芯微、士兰微、韦尔、东微半导、华润微、华海清科、拓荆、北方华创、唯捷创芯、芯原、安集等)20220722.pdf

    士兰微电子目标非常明确,就是以国际上顶尖的 IDM 公司为学习的榜样,目标是做到国际水平。 士兰微电子的发展过程可以分为两个阶段:第一阶段是从 2003 年上市到 2017 年,士兰微建立了 8 英寸的生产线,标志着...

    心智理论可能在大语言模型中自发出现【机译版】.pdf

    此外,这项研究还表明,语言模型可以自发地学习和发展出新的能力,例如计数、差分处理图像区域和光学错觉等。这项发现对人工智能的发展具有重要意义,因为它可能会使人工智能代理更好、更智能。 这项研究表明,心智...

Global site tag (gtag.js) - Google Analytics