LinuxVPS服务器中安装配置Apache的方法
作者:芙蓉花 | 来源:互联网 | 2014-05-28 10:53
本文针对apacheweb服务器的安装配置收集有效的一些经验和方法,用于交流。1.Apache安装配置Apache的安装,考虑只用于Tomcat的前段代理,处理图片和静态文件的请求,并把动态请求转发到tomcat服务处理。本文使用编译安装方式,把跟需求无关的模块关闭,只使
本文针对apache web服务器的安装配置收集有效的一些经验和方法,用于交流。
1.Apache安装配置
Apache的安装,考虑只用于Tomcat的前段代理,处理图片和静态文件的请求,并把动态请求转发到tomcat服务处理。本文使用编译安装方式,把跟需求无关的模块关闭,只使用最小的模块编译,提高软件性能。
编译参数说明:
编译和包含是两个不同的概念。编译是指这个模块被编译了,要想使用它,只用简单的修改httpd.conf加上LoadModule
xxx_module libexec/mod_xxx.so 明确指出。
用以前命令可以查看缺省时已编译和包含进去的模块。不用显式的--enable-MODULE[=shared]
和LoadModule 操作。就已经可以使用的。
core.c:Apache HTTP 服务器提供的核心功能。必须要有的。
mod_access.c:安全认证大大降低访问速度,建议disable it .
mod_auth.c :安全认证大大降低访问速度,建议disable it .
mod_include.c:server side include已经过时了,建议disable it .
mod_log_config.c:用于定制log格式.最好保留.
mod_env.c:修改传送到 CGI 脚本和 SSI 页面的系统环境(变量)。一般说来,可以不需要。
mod_setenvif.c :用户设置环境变量和认证相关,如果没有使用压缩输出,建议disable it .
prefork.c:Implements a non-threaded, pre-forking web
server。参考下面的mpm介绍。
http_core.c:Apache HTTP 服务器提供的核心功能。必须要有的。
mod_mime.c:用于增加文件应用的关联。最好保留。
mod_status.c:Provides information on server activity and
performance 。一般说来,可以不需要。
mod_autoindex.c:不需要将没有缺省index文件的目录下所有文件列出,建议disable it .
mod_asis.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
mod_cgi.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
mod_negotiation.c
:内容协商,以根据浏览器提供的设置选择不同媒介类型、语言、字符集和编码的最佳表现,还有对来自浏览器的不完整内容协商信息作智能处理的能力。一般说来,可以不需要。
mod_dir.c:用于缺省index文件:index.php等。我们现在的应用不需要这个。看情况而定。
mod_imap.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it .
mod_actions.c:尽量不使用CGI:一直是Apache安全问题最多的地方,建议disable it
mod_userdir.c:比如:需要在~/username/下调试php.可用可不用.建议disable it .
mod_alias.c:比如:需要将以前的URL进行转向或者需要使用CGI script-alias.建议disable it
.
mod_so.c
:如果编译中包含有任何动态模块,则mod_so模块会被自动包含进核心。如果希望核心能够装载DSO,而不实际编译任何动态模块,需要明确指定--enable-so。我们的应用使用静态编译,不需要它。建议disable
it .
CC="pgcc" CFLAGS="-O2" :编译器参数优化
--profix:apache的安装目录,默认是安装在/usr/local/apache
$ cd /tools
$ tar ?xzvf apache-2.0.59.tar.gz
$ cd httpd2.0.59
$ CC="pgcc" CFLAGS="-O2" \
./configure --prefix=/usr/apache-2.0.59 \
--disable-access \
--disable-auth \
--disable-include \
--disable-env \
--disable-status \
--disable-autoindex \
--disable-asis \
--disable-cgi \
--disable-negotiation \
--disable-imap \
--disable-actions \
--disable-userdir \
--disable-alias \
--enable-deflate \
--enable-headers \
--enable-setenvif \
--enable-so
$ make
$ make install
安装完成后,因为编译关闭了很多默认的功能模块,所以直接使用发布的默认配置是不能启动服务器的,需要作调整。
设apache的安装目录为$APACHE_HOME
备份默认配置文件$APACHE_HOME/conf/httpd.conf,然后使用highperformance.conf最为配置文件
$ cd $APACHE_HOME/conf/
$ mv httpd.conf httpd.conf_bak
$ cp highperformance.conf httpd.conf
$ ../bin/apachectr start
如果启动失败,请屏蔽调httpd.conf中的mod_access相关命令,如Order等,关于目录权限的控制在本例中可以使用变通方式解决,使用没有加载目录权限控制功能。
启动验证,访问http://$IP/,如果正常显示页面,表示成功。
2.PMP
MPM(Multi-Processing Modules,多道处理模块)
指定MPM的方法
$ ./configure --help|grep mpm
显示如下:
--with-mpm=MPM
Choose the process model for Apache to use.
MPM={beos|worker|prefork|mpmt_os2|
perchild|leader|threadpool}
主要阐述prefork,如果不用
“--with-mpm”显式指定某种MPM,prefork就是Unix平台上缺省的MPM,prefork本身并没有使用到线程,2.0版使用它是为
了与1.3版保持兼容性;prefork用单独的子进程来处理不同的请求,进程之间是彼此独立的,这也使其成为最稳定的MPM之一。
prefork的工作原理是,控制进程
在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待
一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这就是预派生
(prefork)的由来。这种模式可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。
下面是prefork的默认配置段:
StartServers
5
MinSpareServers 5
MaxSpareServers 10
MaxClients
150
MaxRequestsPerChild 0
MinSpareServers
设置了最小的空闲进程数。
MaxSpareServers
设置了最大的空闲进程数,如果空闲进程
数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把
其调整为MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。
MaxClients
MaxClients是这些指令中最为
重要的一个,设定的是Apache可以同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可
通过ps -ef|grep http|wc
-l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下很多而HTTP访问却很慢的主要原因。系统管理员可以根据硬件配置
和负载情况来动态调整这个值。虽然理论上这个值越大,可以处理的请求就越多,但Apache默认的限制不能大于256(在2.0中源于#define
DEFAULT_SERVER_LIMIT
256)。如果把这个值设为大于256,那么Apache将无法起动。事实上,256对于负载稍重的站点也是不够的。在Apache
1.3中,这是个硬限制。如果要加大这个值,必须在“configure”前手工修改的源代码树下的src/include/httpd.h中查找
256,就会发现“#define HARD_SERVER_LIMIT
256”这行。把256改为要增大的值(如4000),然后重新编译Apache即可。在Apache
2.0中新加入了ServerLimit指令,使得无须重编译Apache就可以加大MaxClients。ServerLimit使用也是单独添加一行
在这就可以了。如果ServerLimit的值再这定义超过了20000,就要修改server/mpm/prefork/prefork.c
#define MAX_SERVER_LIMIT 20000。将20000改成更大的值。
MaxRequestsPerChild
设置的是每个子进程可处理的请求数。每
个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理
更多的请求,但如果设成非零值也有两点重要的好处:可防止意外的内存泄漏;在服务器负载下降的时侯会自动减少子进程数。
Apache+jk2的每个进程的的大小是2M,本系统预计分配给apache的内存为400M,那么根据公式:
apache_max_process_with_good_perfermance <(400M / 2m) * 2 =
400
apache_max_process =400 * 1.5 = 700
即最佳性能设置为:400
按照上面的分析,本系统的的prefork.c配置为:
ServerLimit 400
MaxClients 400
StartServers 5
MinSpareServers 5
MaxSpareServers 10
3.gzip压缩输出
通过加入mode_deflate模块对服务器输出压缩传输,可以减小输出压力,节约带宽。
可以减少40%左右的流量,减少机器用于传输的负载.
压缩输出的配置需要以下三个模块功能支持
mod_setenvif.c
mod_deflate
mod_headers
配置
AddOutputFilterByType DEFLATE text/html text/plain text/xml
text/Javascript text/css
# Compress everything except images
# Insert filter
SetOutputFilter DEFLATE
# Netscape 4.x has some problems......
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
推荐阅读
-
我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ...
[详细]
蜡笔小新 2024-11-21 13:01:23
-
本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ...
[详细]
蜡笔小新 2024-11-20 17:58:54
-
-
本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ...
[详细]
蜡笔小新 2024-11-20 10:58:03
-
本文介绍了 PHP 的基本概念、服务器与客户端的工作原理,以及 PHP 如何与数据库交互。同时,还涵盖了常见的数据库操作和安全性问题。 ...
[详细]
蜡笔小新 2024-11-17 15:45:08
-
本文详细介绍了如何在 Ubuntu 系统上安装和配置 LAMP(Linux、Apache、MySQL 和 PHP)服务器。包括 Apache 的安装、PHP 的配置以及 MySQL 数据库的设置,确保读者能够顺利搭建完整的 Web 开发环境。 ...
[详细]
蜡笔小新 2024-11-17 11:05:00
-
本文详细介绍了如何在Notepad++中配置Markdown语法高亮和实时预览功能,包括必要的插件安装和设置步骤。 ...
[详细]
蜡笔小新 2024-11-22 13:03:49
-
计划建立个人博客来分享生活与工作的见解和经验,选择WordPress是因为它专为博客设计,功能强大且易于使用。 ...
[详细]
蜡笔小新 2024-11-22 11:13:36
-
本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ...
[详细]
蜡笔小新 2024-11-22 05:45:48
-
本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ...
[详细]
蜡笔小新 2024-11-21 17:42:08
-
本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ...
[详细]
蜡笔小新 2024-11-20 19:57:35
-
本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ...
[详细]
蜡笔小新 2024-11-20 14:13:38
-
在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ...
[详细]
蜡笔小新 2024-11-19 11:46:52
-
本文介绍了 MySQL Administrator 的主要功能,包括图形化监控 MySQL 服务器的实时状态、连接健康度、内存健康度以及如何创建自定义的健康图表。此外,还详细解释了状态变量和系统变量的管理。 ...
[详细]
蜡笔小新 2024-11-18 08:20:16
-
蜡笔小新 2024-11-17 18:15:16
-
本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ...
[详细]
蜡笔小新 2024-11-21 10:31:32
-