Ubuntu系统里的apache服务器怎么配置域名?
第一步 创建服务器第二步基础服务器安装在你创建第一个服务器之后,你需要开始创建一个新用户,尽管这个步骤不是必须的,但是如果这样将会提升你的服务器安全性能。第三步 安装LAMP 需要在服务器上面安装一个LAMP的服务器环境,我们在之前的 Ubuntu中快速安装Apache+MySQL+PHP 第四步 设置你的域名这时候你需要设置你的站点和域名,域名需要在域名管理面板中进行设置,DNS解析到您的服务器IP地址上,这个过程可能需要等待一段时间,确认好了以后就可以通过访问域名来访问你的站点了。第五步 安装FTP服务器现在你需要连接你的服务器,如果是Apache,你就会看到默认页“It Works”,这说明这个域名已经成功解析了,在浏览器中打开站点域名,就能够看到我们设定好的站点,这个时候你需要安装设置FTP服务器。第六步 修正你的权限如果所有步骤都已经完毕,我们第一次连接FTP时候发现默认打开目录是用户目录,这时候我们需要改为默认指向站点目录,可以在命令行中打开: sudo nano /etc/proftpd/proftpdconf r按后我们需要改变默认用户到站点目录(例如:/var/www)这样通过FTP连接服务器默认就会指向这个目录。 DefaultRoot /var/www 完成了目录权限的设定,我们需要对网站的目录进行权限设置,我们需要创建一个新的账号,然后更改站点根目录为我们创建的这个新用户: sudo adduser username www-data sudo chown -R www-data:www-data /var/www sudo chmod -R g+rw /var/www 第七步 安装设置FileZilla 你现在需要你在你Web服务器上设置FTP服务器。然后通过FTP GUI客户端来管理你的FileZilla,你可以从这里下载。安装客户端后连接你的服务器:设定好你的host和用户名、密码,然后连接你的服务器,这时候信息提示将会出现:这样你可以拖动文件上传文件到你的服务器,具体操作可以去网上看看相关教程。
Apache是世界使用排名第一的Web服务器。它可以运行在几乎所有广泛使用的计算机平台上。
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一。Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以不断有人来为它开发新的功能、新的特性、修改原来的缺陷。Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。
本来它只用于小型或试验Internet网络,后来逐步扩充到各种Unix系统中,尤其对Linux的支持相当完美。Apache有多种产品,可以支持SSL技术,支持多个虚拟主机。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器。到目前为止Apache仍然是世界上用的最多的Web服务器,市场占有率达60%左右。世界上很多著名的网站如Amazoncom、Yahoo!、W3 Consortium、Financial Times等都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支开放的开发队伍、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。
Apache的诞生极富有戏剧性。当NCSA WWW服务器项目停顿后,那些使用NCSA WWW服务器的人们开始交换他们用于该服务器的补丁程序,他们也很快认识到成立管理这些补丁程序的论坛是必要的。就这样,诞生了Apache Group,后来这个团体在NCSA的基础上创建了Apache。
Apache服务器拥有以下特性:
支持最新的HTTP/11通信协议
拥有简单而强有力的基于文件的配置过程
支持通用网关接口
支持基于IP和基于域名的虚拟主机
支持多种方式的HTTP认证
集成Perl处理模块
集成代理服务器模块
支持实时监视服务器状态和定制服务器日志
支持服务器端包含指令(SSI)
支持安全Socket层(SSL)
提供用户会话过程的跟踪
支持FastCGI
通过第三方模块可以支持Java Servlets
如果你准备选择Web服务器,毫无疑问Apache是你的最佳选择。
http://wwwapacheorg/
是它的官方网站
Apache服务器的设置文件位于/usr/local/apache/conf/目录下,传统上使用三个配置文件httpdconf,accessconf和srmconf,来配置Apache服务器的行为。
httpdconf提供了最基本的服务器配置,是对守护程序httpd如何运行的技术描述;srmconf是服务器的资源映射文件,告诉服务器各种文件的MIME类型,以及如何支持这些文件;accessconf用于配置服务器的访问权限,控制不同用户和计算机的访问限制;这三个配置文件控制着服务器的各个方面的特性,因此为了正常运行服务器便需要设置好这三个文件。
除了这三个设置文件之外,Apache还使用mimetypes文件用于标识不同文件对应的MIME类型, magic文件设置不同MIME类型文件的一些特殊标识,使得Apache 服务器从文档后缀不能判断出文件的MIME 类型时,能通过文件内容中的这些特殊标记来判断文档的MIME类型。
bash-202$ ls -l /usr/local/apache/conf
total 100
-rw-r--r-- 1 root wheel 348 Apr 16 16:01 accessconf
-rw-r--r-- 1 root wheel 348 Feb 13 13:33 accessconfdefault
-rw-r--r-- 1 root wheel 30331 May 26 08:55 httpdconf
-rw-r--r-- 1 root wheel 29953 Feb 13 13:33 httpdconfdefault
-rw-r--r-- 1 root wheel 12441 Apr 19 15:42 magic
-rw-r--r-- 1 root wheel 12441 Feb 13 13:33 magicdefault
-rw-r--r-- 1 root wheel 7334 Feb 13 13:33 mimetypes
-rw-r--r-- 1 root wheel 383 May 13 17:01 srmconf
-rw-r--r-- 1 root wheel 357 Feb 13 13:33 srmconfdefault
事实上当前版本的Apache将原来httpdconf、srmconf与accessconf中的所有配置参数均放在了一个配置文件httpdconf中,只是为了与以前的版本兼容的原因(使用这三个设置文件的方式来源于NCSA-httpd),才使用三个配置文件。而提供的accessconf和srmconf文件中没有具体的设置。
由于在新版本的Apache中,所有的设置都被放在了httpdconf中,因此只需要调整这个文件中的设置。以下使用缺省提供的httpdconf为例,解释Apache服务器的各个设置选项。然而不必因为它提供设置的参数太多而烦恼,基本上这些参数都很明确,也可以不加改动运行Apache服务器。但如果需要调整Apache服务器的性能,以及增加对某种特性的支持,就需要了解这些设置参数的含义。
关于Apache服务器的性能,在Internet上存在很大的争议,基本上使用Apache的使用者几乎都不怀疑它的优秀性能,Apache也支撑了很多著名的高负载的网站,但是在商业机构的评测中,Apache往往得分不高。很多人指出,在这些评测中,商业Web服务器及其操作系统往往由其专业公司的工程师进行过性能调整,而Free 的操作系统和Web服务器往往就使用其缺省配置或仅仅作很小的更改。需要指出的是,除了操作系统的性能调整之外,Apache 服务器本身的缺省配置绝不是最优化和最高效的,而是要适应几乎所有种类操作系统、所有种类硬件下的设置,多平台的软件不可能为特定平台和特定硬件提供最优化的缺省配置。因此要使用Apache的时候,性能调整是必不可少的。
在商业评测中忽略了的另一个事实是,评测时往往对不同种类的功能进行比较,例如使用Apache的标准CGI 的性能与ISAPI,NSAPI等服务器端API比较,事实上Apache服务器与此可以比较的功能为modperl ,FastCGI,与ASP类似的功能为PHP等等,只不过由于Apache的开放模式,这些功能是由独立的开发组,作为独立的模块来实现的。但是在评测中,测试人员没有加入相应的模块评测其性能。
HTTP守护进程的运行参数
httpdconf中首先定义了一些httpd守护进程运行时需要的参数,来决定其运行方式和运行环境。
ServerType standalone
ServerType定义服务器的启动方式,缺省值为独立方式standalone,httpd
服务器将由其本身启动,并驻留在主机中监视连接请求。在Linux下将在启动文件 /etc/rcd/rclocal/initd/apache中自动启动Web服务器,这种方式是推荐设置。
启动Apache服务器的另一种方式是inet方式,使用超级服务器inetd监视连接请求并启动服务器。当需要使用inetd启动方式时,便需要更改为这个设置,并屏蔽/etc/rcd/rclocal/initd/apache文件,以及更改/etc/inetdconf并重起inetd,那么Apache就能从inetd中启动了。
两种方式的区别是独立方式是由服务器自身管理自己的启动进程,这样在启动时能立即启动服务器的多个副本,每个副本都驻留在内存中,一有连接请求不需要生成子进程就可以立即进行处理,对于客户浏览器的请求反应更快,性能较高。而 inetd方式要由inetd发现有连接请求后才去启动http服务器,由于inetd 要监听太多的端口,因此反应较慢、效率较低,但节约了没有连接请求时Web服务器占用的资源。因此inetd方式只用于偶尔被访问并且不要求访问速度的服务器上。事实上inetd方式不适合http的突发和多连接的特性,因为一个页面可能包含多个图象,而每个图象都会引起一个连接请求,即使虽然访问人数造成教少,但瞬间的连接请求并不少,这就受到inetd性能的限制,甚至会影响由inetd启动的其他服务器程序。
ServerRoot "/usr/local"
ServerRoot用于指定守护进程httpd的运行目录,httpd在启动之后将自动将进程的当前目录改变为这个目录,因此如果设置文件中指定的文件或目录是相对路径,那么真实路径就位于这个ServerRoot定义的路径之下。
由于httpd会经常进行并发的文件操作,就需要使用加锁的方式来保证文件操作不冲突,由于NFS文件系统在文件加锁方面能力有限,因此这个目录应该是本地磁盘文件系统,而不应该使用NFS文件系统。
#LockFile /var/run/httpdlock
LockFile参数指定了httpd守护进程的加锁文件,一般不需要设置这个参数, Apache服务器将自动在ServerRoot下面的路径中进行操作。但如果ServerRoot为NFS文件系统,便需要使用这个参数指定本地文件系统中的路径。
PidFile /var/run/httpdpid
PidFile指定的文件将记录httpd守护进程的进程号,由于httpd能自动复制其自身,因此系统中有多个httpd进程,但只有一个进程为最初启动的进程,它为其他进程的父进程,对这个进程发送信号将影响所有的httpd进程。PidFILE定义的文件中就记录httpd父进程的进程号。
ScoreBoardFile /var/run/httpdscoreboard
httpd使用ScoreBoardFile来维护进程的内部数据,因此通常不需要改变这个参数,除非管理员想在一台计算机上运行几个Apache服务器,这时每个Apache服务器都需要独立的设置文件htt pdconf,并使用不同的ScoreBoardFile。
#ResourceConfig conf/srmconf
#AccessConfig conf/accessconf
这两个参数ResourceConfig和AccessConfig,就用于和使用 srmconf 和 accessconf 设置文件的老版本Apache兼容。如果没有兼容的需要,可以将对应的设置文件指定为/dev/null,这将表示不存在其他设置文件,而仅使用httpdconf 一个文件来保存所有的设置选项。
Timeout 300
Timeout定义客户程序和服务器连接的超时间隔,超过这个时间间隔(秒)后服务器将断开与客户机的连接。
KeepAlive On
在HTTP 10中,一次连接只能作传输一次HTTP请求,而KeepAlive参数用于支持HTTP 11版本的一次连接、多次传输功能,这样就可以在一次连接中传递多个HTTP请求。虽然只有较新的浏览器才支持这个功能,但还是打开使用这个选项。
MaxKeepAliveRequests 100
MaxKeepAliveRequests为一次连接可以进行的HTTP请求的最大请求次数。将其值设为0将支持在一次连接内进行无限次的传输请求。事实上没有客户程序在一次连接中请求太多的页面,通常达不到这个上限就完成连接了。
KeepAliveTimeout 15
KeepAliveTimeout测试一次连接中的多次请求传输之间的时间,如果服务器已经完成了一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接。
MinSpareServers 5MaxSpareServers 10
在使用子进程处理HTTP请求的Web服务器上,由于要首先生成子进程才能处理客户的请求,因此反应时间就有一点延迟。但是,Apache服务器使用了一个特殊技术来摆脱这个问题,这就是预先生成多个空余的子进程驻留在系统中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。在运行中随着客户请求的增多,启动的子进程会随之增多,但这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。但是空余的子进程副本不能光增加不减少,太多的空余子进程没有处理任务,也占用服务器的处理能力,因此也要限制空余副本的数量,使其保持一个合适的数量,使得既能及时回应客户请求,又能减少不必要的进程数量。
因此就可以使用参数MinSpareServers来设置最少的空余子进程数量, 以及使用参数MaxSpareServers 来限制最多的空闲子进程数量,多余的服务器进程副本就会退出。根据服务器的实际情况来进行设置,如果服务器性能较高,并且也被频繁访问,就应该增大这两个参数的设置。对于高负载的专业网站,这两个值应该大致相同,并且等同于系统支持的最多服务器副本数量,也减少不必要的副本退出。
StartServers 5
StartServers参数就是用来设置httpd启动时启动的子进程副本数量,这个参数与上面定义的MinSpareServers和MaxSpareServers参数相关,都是用于启动空闲子进程以提高服务器的反应速度的。这个参数应该设置为前两个值之间的一个数值,小于MinSpareServers和大于MaxS pareServers都没有意义。
MaxClients 150
在另一方面,服务器的能力毕竟是有限的,不可能同时处理无限多的连接请求,因此参数Maxclient s就用于规定服务器支持的最多并发访问的客户数,如果这个值设置得过大,系统在繁忙时不得不在过多的进程之间进行切换来为太多的客户进行服务,这样对每个客户的反应就会减慢,并降低了整体的效率。如果这个值设置的较小,那么系统繁忙时就会拒绝一些客户的连接请求。当服务器性能较高时,就可以适当增加这个值的设置。对于专业网站,应该使用提高服务器效率的策略,因此这个参数不能超过硬件本身的限制,如果频繁出现拒绝访问现象,就说明需要升级服务器硬件了。对于非专业网站,不太在意对客户浏览器的反应速度,或者认为反应速度较慢也比拒绝连接好,就也可以略微超过硬件条件来设置这个参数。
这个参数限制了MinSpareServers和MaxSpareServers的设置,它们不应该大于这个参数的设置。
MaxRequestsPerChild 30
使用子进程的方式提供服务的Web服务,常用的方式是一个子进程为一次连接服务,这样造成的问题就是每次连接都需要生成、退出子进程的系统操作,使得这些额外的处理过程占据了计算机的大量处理能力。因此最好的方式是一个子进程可以为多次连接请求服务,这样就不需要这些生成、退出进程的系统消耗,Apache就采用了这样的方式,一次连接结束后,子进程并不退出,而是停留在系统中等待下一次服务请求,这样就极大的提高了性能。
但由于在处理过程中子进程要不断的申请和释放内存,次数多了就会造成一些内存垃圾,就会影响系统的稳定性,并且影响系统资源的有效利用。因此在一个副本处理过一定次数的请求之后,就可以让这个子进程副本退出,再从原始的httpd进程中重新复制一个干净的副本,这样就能提高系统的稳定性。这样,每个子进程处理服务请求次数由MaxRe questPerChild定义。 缺省的设置值为30,这个值对于具备高稳定性特点的Linux系统来讲是过于保守的设置,可以设置为1000甚至更高,设置为0支持每个副本进行无限次的服务处理。
#Listen 3000
#Listen 12345678:80
#BindAddress
Listen参数可以指定服务器除了监视标准的80端口之外,还监视其他端口的HTTP请求。由于FreeBSD系统可以同时拥有多个IP地址,因此也可以指定服务器只听取对某个BindAddress< /B>的IP地址的HTTP请求。如果没有配置这一项,则服务器会回应对所有IP的请求。
即使使用了BindAddress参数,使得服务器只回应对一个IP地址的请求,但是通过使用扩展的Listen参数,仍然可以让HTTP守护进程回应对其他IP地址的请求。此时Listen参数的用法与上面的第二个例子相同。这种比较复杂的用法主要用于设置虚拟主机。此后可以用VirtualHost参数定义对不同IP的虚拟主机,然而这种用法是较早的HTTP 10标准中设置虚拟主机的方法,每针对一个虚拟主机就需要一个IP地址,实际上用处并不大。在HTTP 11中,增加了对单IP地址多域名的虚拟主机的支持,使得虚拟主机的设置具备更大的意义。
LoadModule mime_magic_module libexec/apache/mod_mime_magicso
LoadModule info_module libexec/apache/mod_infoso
LoadModule speling_module libexec/apache/mod_spelingso
LoadModule proxy_module libexec/apache/libproxyso
LoadModule rewrite_module libexec/apache/mod_rewriteso
LoadModule anon_auth_module libexec/apache/mod_auth_anonso
LoadModule db_auth_module libexec/apache/mod_auth_dbso
LoadModule digest_module libexec/apache/mod_digestso
LoadModule cern_meta_module libexec/apache/mod_cern_metaso
LoadModule expires_module libexec/apache/mod_expiresso
LoadModule headers_module libexec/apache/mod_headersso
LoadModule usertrack_module libexec/apache/mod_usertrackso
LoadModule unique_id_module libexec/apache/mod_unique_idso
ClearModuleList
AddModule mod_envc
AddModule mod_log_configc
AddModule mod_mime_magicc
AddModule mod_mimec
AddModule mod_negotiationc
AddModule mod_statusc
AddModule mod_infoc
AddModule mod_includec
AddModule mod_autoindexc
AddModule mod_dirc
AddModule mod_cgic
AddModule mod_asisc
AddModule mod_imapc
AddModule mod_actionsc
AddModule mod_spelingc
AddModule mod_userdirc
AddModule mod_proxyc
AddModule mod_aliasc
AddModule mod_rewritec
AddModule mod_accessc
AddModule mod_authc
AddModule mod_auth_anonc
AddModule mod_auth_dbc
AddModule mod_digestc
AddModule mod_cern_metac
AddModule mod_expiresc
AddModule mod_headersc
AddModule mod_usertrackc
AddModule mod_unique_idc
AddModule mod_soc
AddModule mod_setenvifc
Apache服务器的一个重要特性就是其模块化的结构,这不但表现为其能在编译时能通过新的模块加入新的功能,还表现为其模块可以动态加载入http服务程序中,而不必载入不需要的模块。使用Apache的动态加载模块只需要设置好Load Module和AddModule参数就可以了,这种特性就是Apache的 DSO(Dynamic Shared Object)特性,然而要想充分使用DSO特性仍然不是一个简单的事情,不适当的改动这里的设置就可能造成服务器不能正常启动。因此如果不是要增加或减少服务器提供的功能,就不要改动这里的设置。
上面这些列表就显示了Linux下的缺省Apache服务器支持的模块,事实上很多模块是没有必要的,不必要模块不会被载入内存。模块可以静态连接到pache 服务器内部,也可以这样动态加载,将Apache的特性都编译成动态可加载模块是该Port的做法,而不是Apache的缺省做法,这样就以牺牲很小的性能的同时,带来极大的灵活性。
因而动态可加载的能力还是对性能有轻微的影响,因此可以重新编译Apache,将自己所需要的功能编译进Apache 服务器内部,可以让系统显得更为干净,效率也有轻微的提高。通常仅仅为了这一个目的就重新编译Apache是没有必要的,如果需要增加其他特性而重新编译Apache,不妨在增加其他模块的同时将所有的模块都静态连接入Apache 服务器。有的使用者更喜欢动态加载模块,那么也不妨全部都使用动态加载模块。
这些模块都被放置到/usr/local/apache/libexec/目录下, 每个模块对应Apache服务器的一个特性。详细解释每个模块的功能需要相当多的篇幅,其中比较重要的特性将在后面相应的地方中进行解释,而具体每个模块的功能及用法就需要查看Apache的文档。
#ExtendedStatus On
Apache服务器可以通过特殊的HTTP请求,来报告自身的运行状态,打开这个ExtendedStatus 参数可以让服务器报告更全面的运行状态信息。
自己租借的服务器是不需要自己安装APACHE的,租借商会给你装好,你只要把你自己想发布的内容告诉他就行
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/httpdh
#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://wwwcronologorg
升级/维护:看看通用和模块化的安装过程如何简化了日常的升级/维护工作;
按照以上的方法:系统管理员和应用管理员的职责可以清楚的分开,互相独立。
系统安装:系统管理员的职责就是安装好一台DSO模式的Apache,然后COLON即可,
应用安装:由应用管理员负责具体应用所需要的模块,比如PHP Resin等,并设置httpdconf中相关的配置。
系统升级:系统管理员:升级操作系统/升级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 15
为什么会有一个apache_max_process_with_good_perfermance和apache_max_process呢?原因是在低负载下系统可以使用更多的内存用于文件系统的缓存,从而进一步提高单个请求的响应速度。在高负载下,系统的单个请求响应速度会慢不少,而超过 apache_max_process,系统会因为开始使用硬盘做虚拟内存交换空间而导致系统效率急剧下降。此外,同样的服务:2G内存的机器的 apache_max_process一般只设置到1G内存的17倍,因为Apache本身会因为进程过多导致性能下降。
例子1:
一个apache + mod_php的服务器:一个apache进程一般需要4M内存
因此在一个1G内存的机器上:apache_max_process_with_good_perfermance < (1g / 4m) 2 = 500
apache_max_process = 500 15 = 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 15 = 3000
以上估算都是按小文件服务估算的(一个请求一般大小在20k以下)。对于文件下载类型站点,可能还会受其他因素:比如带宽等的影响。
Apache安装过程
服务器个数的硬上限HARD_SERVER_LIMIT的修改:
在Apache的源代码中缺省的最大进程数是256个,需要修改apache_13xx/src/include/httpdh
#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 "#" httpdconfdefault >httpdconf
需要修改的通用项目有以下几个:
#服务端口,缺省是8080,建议将整个Apache配置调整好后再将服务端口改到正式服务的端口
Port 8080 => 80
#服务器名:缺省没有
ServerName nameexamplecom
#最大服务进程数:根据服务容量预测设置
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_envso
#LoadModule negotiation_module libexec/mod_negotiationso
#LoadModule status_module libexec/mod_statusso
#server side include已经过时了
#LoadModule includes_module libexec/mod_includeso
#不需要将没有缺省index文件的目录下所有文件列出
#LoadModule autoindex_module libexec/mod_autoindexso
#尽量不使用CGI:一直是Apache安全问题最多的地方
#LoadModule cgi_module libexec/mod_cgiso
#LoadModule asis_module libexec/mod_asisso
#LoadModule imap_module libexec/mod_imapso
#LoadModule action_module libexec/mod_actionsso
#不使用安全认证可以大大提高访问速度
#LoadModule access_module libexec/mod_accessso
#LoadModule auth_module libexec/mod_authso
#LoadModule setenvif_module libexec/mod_setenvifso
最好保留的有:
#用于定制log格式
LoadModule config_log_module libexec/mod_log_configso
#用于增加文件应用的关联
LoadModule mime_module libexec/mod_mimeso
#用于缺省index文件:indexphp等
LoadModule dir_module libexec/mod_dirso
可用可不用的有:
#比如:需要在~/username/下调试php可以将
LoadModule userdir_module libexec/mod_userdirso
#比如:需要将以前的URL进行转向或者需要使用CGI script-alias
LoadModule alias_module libexec/mod_aliasso
常用的模块:
最常用的可能就是php和JAVA应用服务器的前端,此外,从性能上讲利用mod_gzip可以减少40%左右的流量,减少机器用于传输的负载,而 mod_expires可以减少10%左右的重复请求,让重复的用户对指定的页面请求结果都CACHE在本地,根本不向服务器发出请求。
建议将所有MODULE的配置都放到相应模块的配置内部:some_module config
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/resinconf
CauchoConfigFile /path/to/apache/conf/resinconf
mod_expires的安装配置:
ExpiresActive on
ExpiresByType image/gif "access plus 1 month"
ExpiresByType text/css "now plus 1 month"
ExpiresDefault "now plus 1 day"
注释:
所有的gif文件1个月以后过期
所有的文件缺省1天以后过期
mod_gzip的安装
http://wwwchedongcom/tech/compresshtml
日志的轮循: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_loggz -mtime +3 |xargs -r /bin/rm -f
升级维护:
由于使用动态模块加载方式(DSO模式)安装Apache,Apache的HTTPD核心服务和应用模块以及应用模块之间都变的非常灵活,建议将所有独立模块的配置都放在
CONFIGURATIONS
里,这样配置非常容易通过屏蔽某个模块来进行功能调整:比如:
#AddModule mod_gzipc
就屏蔽了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
应用例子: wwwexamplecom
imageexamplecom
bbsexamplecom mallexamplecom
例子: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个文件:
Apache,一种开放源码的HTTP服务器,可以在大多数计算机操作系统中运行,由于其多平台和安全性(注1)被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩展,Perl/Python等解释器可被编译到服务器中。
历史
Apache
起初由 Illinois 大学 Urbana-Champaign 的国家高级计算程序中心开发。此后,Apache
被开放源代码团体的成员不断的发展和加强。Apache
服务器拥有牢靠可信的美誉,已用在超过半数的因特网站中-特别是几乎所有最热门和访问量最大的网站。
开始,Apache只是Netscape网页服务器(现在是Sun
ONE)的之外的开放源代码选择。渐渐的,它开始在功能和速度。超越其他的基于Unix的HTTP服务器。1996年4月以来,Apache一直是
Internet上最流行的HTTP服务器: 1999年5月它在 57% 的网页服务器上运行;到了2005年7月这个比例上升到了69%。
作
者宣称因为这个名字好记才在最初选择它,但是流传最广的解释是(也是最显而易见的):这个名字来自这么一个事实:当Apache在1995年初开发的时
候,它是由当时最流行的HTTP服务器NCSA HTTPd 13 的代码修改而成的,因此是“一个修补的(a
patchy)”服务器。然而在服务器官方网站的FAQ中是这么解释的:“‘Apache’这个名字是为了纪念名为Apache(印地语)的美洲印第安人
土著的一支,众所周知他们拥有高超的作战策略和无穷的耐性”。无论怎么样,Apache 2x 分支不包含任何 NCSA 的代码。
特性
Apache
支持许多特性,大部分通过编译的模块实现。这些特性从服务器端的编程语言支持到身份认证方案。一些通用的语言接口支持Perl,Python, Tcl,
和 PHP。流行的认证模块包括 mod_access, mod_auth 和 mod_digest。其他的例子有 SSL 和 TLS 支持
(mod_ssl), proxy 模块,很有用的URL重写(由 mod_rewrite 实现),定制日志文件
(mod_log_config),以及过滤支持(mod_include 和
mod_ext_filter)。Apache日志可以通过网页浏览器使用免费的脚本AWStats或Visitors来进行分析。
2x版本
Apache 的2x版本核心在Apache 1x版本之上作出了重要的加强。这包括:线程,更好的支持非UNIX平台(例如Windows),新的 Apache API,以及IPv6支持。
评价
《PC Magazine》2004年8月评出了近30年以来的10款最佳软件产品。
他们其中或者是有过最辉煌的历史,或者是最具创意。其对apache的评价是:第三名:Apache(阿帕奇,1995年推出)Apache目前已经演变
成了“LAMP”,即Linux、Apache、MySQL和PHP的联合体。这是一个开放源代码软件项目,已经对微软的“NET”战略构成严重威胁。
尤其是Apache网络服务器,让用户充分体验到开发源码软件的稳定性、可靠性和可定制性。
Applecom评价apache时
说:Apache是服务器软件始终不断进化的大块部件,它免费但又是无价之宝。Apache
是在资源开放运动中出现的绝对珍品,因为不属于个人专利而是对公共免费。一旦拥有这些源码,程序员能够自由完成所想——能在其它程序员接替工作时被赋予同
样的权限来改变和修改自己的源代码。
注释
尽管不断有新的漏洞被发现,但由于其OpenSource的特点,漏洞总能被很快修补。因此总的来说,其安全性还是相当高的。
() [#page_#][#page_#]AddHandler cgi-script cgi
AddHandler server-parsed shtml
Sethandler cgi-script
AddHandler定义了何种扩展名用那一个字符串进行描述
SetHandler把一个目录下的文件都指定用这一个字符串描述
我在这里提到的命令都是与其结构密切相关的 Handler和Type的关系在下面会描述的 许多的东东从外面是看不清楚的, 下面, 我们从里面看
三 程序的基本结构
-----------------
Apache有非常好的跨平台性 为了实现这一目标和简化模块编写者的负担,Apache完成了许多基本的功能如IO, 内存分配等, 这些接口都是与具体平台无关的 还有一些很有用的例程如: hash table, array 等 在整个体系中, Apache有一个基本点, 它尽可能的使用简单的结构和算法, 这不仅易于理解和维护, 还提高了它的稳定性
在
UNIX系统上, Apache采用了多进程模型, 在Window上采用了多线程模型多进程模型中, 其子进程处理客户请求,
父进程用于管理子进程 当系统过载时父进程会再启动几个子进程, 当系统空闲时, 父进程会杀掉几个子进程
子进程的数目在"MinSpareServers"和"MaxSpareServers"之间 而且, 每个子进程处理的请求个数也是有限制的,
这可以解决诸如内存泄漏等问题 所有的进程状态都被记录在share memory中 由于每个进程的状态记录在其中的一小块内存上,
它通常也只读写这一块内存, 因此, Apache没有使用什么同步机制
在Richard Steve的书上说到的几种多进程服务器模型, Apache都使用了,在不同的系统上根据其特点选择使用不同的方法:
1 accept :
在accept处阻塞, 只有在accept是在内核级实现的才行
2 select :
在select处阻塞
3 mutex/lock_file :
使用mutex或lock_file来进行对accpet进行互斥
三
种方法都要求进行阻塞, 区别在于阻塞与不同的地方 前两种方法都会由所谓的巨群问题: 多个阻塞在同一个资源上的进程被同时唤醒引发再次竞争
不过, 按Richard Steve 的评测, 第一种方法最快, 第二种其次, 第三种最慢 其实, 在linux上第三种方法也会有巨群问题
Apache虽然并不强调性能, 这并不意味着他们不重视性能 而是Apache认为在Server端realiable才是第一位的 但Apache的性能还是不错的
0条评论