`
darkma
  • 浏览: 526224 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类

[转]Apache 1.3.x 安装与配置

阅读更多
本文引自:http://www.chedong.com/tech/apache_install.html

内容摘要:

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


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

WEB应用容量规划:根据硬件配置和WEB应用的特点进行WEB服务的规划及一些简单的估算公式;
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
可选应用模块/工具的安装: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
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台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
分享到:
评论

相关推荐

    kafka-manager-1.3.3.16.zip(已编译)

    4. **安全配置**:在1.3.3.16版本中,Kafka Manager可能已经支持与Kafka集群的安全连接,包括SASL和SSL认证,这使得在安全环境中使用变得更加方便。 5. **监控与报警**:Kafka Manager可以实时监控集群的健康状况,...

    kafka-manager-1.3.3.7

    ### 安装与运行 要运行Kafka-Manager,首先需要解压`kafka-manager-1.3.3.7.zip`文件。这个压缩包包含了一个预编译的可执行JAR文件,以及所有必要的依赖库。解压后,你可以通过以下步骤启动服务: 1. **设置环境...

    kafka-manager最新编译版1.3.3.22,解决了异常Unknown offset schema version 3

    在部署Kafka-Manager 1.3.3.22时,用户可以利用压缩包内的kafka-manager-1.3.3.22文件,按照官方文档的指导进行配置和启动,轻松实现开箱即用。确保与你的Kafka集群版本匹配,以充分利用其提供的所有功能和修复。 ...

    Apache2.2.x+Tomcat6.x+jk2.x做集群配置

    一、Apache2.2.x的安装与配置 1. 安装Apache2.2.x:首先,你需要在服务器上安装Apache。这通常可以通过包管理器完成,例如在Ubuntu/Debian上使用`apt-get install apache2`,在CentOS/RHEL上使用`yum install httpd`...

    phpstudy_x64_8.1.1.3.zip

    在解压并运行“phpstudy_x64_8.1.1.3.exe”文件后,我们开始安装过程。安装过程中,用户可以选择安装所需的PHP版本和Web服务器。PHP 8.1.1是当前的最新版本,带来了性能提升和诸多新特性,例如错误处理的改进、更...

    struts1.3.15.1高危漏洞修复版ssh包

    Struts是Apache软件基金会开发的一款开源的MVC框架,主要用于构建企业级的Java Web应用程序。在Struts 1.x版本中,存在一个名为CVE-2017-9791的安全漏洞,这是一个高危级别的远程代码执行漏洞,攻击者可以利用这个...

    dataimportscheduler-1.3.jar

    《Solr6.3.0数据增量更新与DataImportScheduler详解》 Apache Solr,作为一款流行的开源全文搜索引擎,提供高效、可扩展的搜索和分析功能。在实际应用中,我们常常需要对索引进行实时更新,以确保数据的时效性。...

    网络安全 - PHP 环境配置 - phpstudy-x64-8.1.1.3.zip - 适合 Windows 体质

    x64_8.1.1.3是一款专为Windows系统设计的PHP环境集成包,集成了Apache、Nginx、LightTPD、PHP、MySQL、phpMyAdmin、Zend Optimizer及Zend Loader等最新版本的软件组件,为PHP开发者提供了一个“一键安装,无需配置”...

    commons-dbcp-1.2.1.jar commons-pool-1.3.jar struts-legacy.jar

    - Struts 1.x的主要组件包括ActionForm、Action、Dispatcher(现在称为Servlet Filter)、配置文件(struts-config.xml)等。它的MVC模式帮助分离业务逻辑和视图层,简化了Web应用的开发。 这三者组合在一起,可能...

    TestLink安装配置手册.doc

    3. WebServer (Apache 1.3.x 或 2.0.x 及以上,IIS 3 及以上) 安装环境 1. 安装Webserver、php和MySQL 2. 配置PHP对MySQL的支持 3. 创建MySQL数据库 4. 导入缺省数据 配置文件 1. config.inc.php - 主要的配置...

    apache2.4 X64版本

    Apache HTTP Server 2.4是目前广泛使用的...在部署Apache 2.4 X64版本时,要确保正确安装所有必要的模块,并根据实际需求调整配置,以实现最佳性能和安全性。同时,定期更新以获取最新的安全补丁和功能改进至关重要。

    springboot整合log4j入门程序

    源码说明:- SpringBoot只有1.3和1.3.x以下版本才支持log4j,1.3.x以上版本只支持log4j2(对于log4j来说很多变动)- 引入log4j之后,Springboot推荐优先使用带有-spring的文件名作为日志配置(eg: log4j-spring....

    apache_1.3.23.tar.gz

    8. **兼容性**:Apache 1.3.x与大多数流行的操作系统和编程语言兼容,包括Turbolinux,这是一个基于Linux的商业发行版,特别适合企业级应用。 解压`apache_1.3.23.tar.gz`后,通常会得到一个名为`apache_1.3.23`的...

    apache_1.3.27.tar.gz

    2. **多线程模型**:Apache 1.3.x系列采用预读取(Prefork)多进程模型,每个进程可以服务多个连接。这种模型在资源管理和并发性方面有一定的优势,但也相对消耗更多的内存。 3. **模块化架构**:Apache以其模块化...

    IBM WebSphere Application Server Network Deployment 9.0.5.X 安装配置

    ### IBM WebSphere Application Server Network Deployment 9.0.5.X 安装配置 #### 一、总体介绍 ##### 1.1 概述 IBM WebSphere Application Server (WAS) Network Deployment 是一款企业级应用服务器,它提供了...

    apisix-1.3-0.el7.noarch.rpm

    标题中的"apisix-1.3-0.el7.noarch.rpm"是一款名为Apache APISIX的软件包,版本为1.3.0,适配于Linux的CentOS 7操作系统,且该包格式为"noarch",意味着它是与体系结构无关的,可以在任何处理器架构上运行。...

    apache-tomcat-8.5.61

    3. **改进的安全性**:Tomcat 8.5增强了安全性,包括支持TLSv1.3,以及更严格的默认加密套件配置,帮助抵御各种网络攻击。 4. **配置改进**:配置文件结构和命名更加合理,使得管理和配置更加直观。例如,server....

    IoTDB 1.3.0 all

    7. **流式处理支持**:与Apache Flink等流处理框架集成,实现数据实时处理和分析。 8. **多租户支持**:支持多用户和多应用的并发访问,通过权限管理确保数据安全。 9. **API接口**:提供了Java、Python、C++等...

    apache_1.3.26-i686

    3. **多线程与进程模型**:Apache 1.3.x版本支持两种工作模式:预读取(Prefork)和多进程模块(MPM)。预读取模式下,Apache会预先启动多个子进程来处理请求,而MPM则使用线程处理请求,适合内存有限但CPU资源丰富...

Global site tag (gtag.js) - Google Analytics