📄 www-howto-7.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <META NAME="GENERATOR" CONTENT="ZH-SGML-Tools 1.0.9"> <TITLE>中文 Linux WWW HOWTO : Apache</TITLE> <LINK HREF="WWW-HOWTO-8.html" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO-8.html" REL=next> <LINK HREF="WWW-HOWTO-6.html" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO-6.html" REL=previous> <LINK HREF="WWW-HOWTO.html#toc7" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO.html#toc7" REL=contents><SCRIPT src="menu.js"> function BeginPage() {} function EndPage() {} </SCRIPT> </HEAD> <BODY bgcolor=#FFFFFF MARGINHEIGHT=0 MARGINWIDTH=0> <A HREF="WWW-HOWTO-8.html" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO-8.html"><IMG SRC="next.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/next.gif" ALT="Next"></A><A HREF="WWW-HOWTO-6.html" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO-6.html"><IMG SRC="prev.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/prev.gif" ALT="Previous"></A><A HREF="WWW-HOWTO.html#toc7" tppabs="http://www.linux.org.tw/CLDP/gb/WWW-HOWTO.html#toc7"><IMG SRC="toc.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/toc.gif" ALT="Contents"></A><HR><H2><A NAME="apache"></A> <A NAME="s7">7. Apache</A></H2><P>Apache最新版本为1.3.9。它的主要网站为<A HREF="javascript:if(confirm('http://www.apache.org/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.apache.org/'" tppabs="http://www.apache.org/">http://www.apache.org/</A>。Apacheweek也有不错的资料网站为:<A HREF="javascript:if(confirm('http://www.apacheweek.com/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.apacheweek.com/'" tppabs="http://www.apacheweek.com/">http://www.apacheweek.com/</A>。Apache的文件还好啦!所以我不必再多加细述如何设定Apache。他们在网站上,也跟原始程序在一起[HTML格式]。虽然也有一般文字档格式,但以HTML格式较佳。等到Apache Documentation Project完成後,它应该会更好。但现在大部份的文件都由他们的开发者自行撰写。我并不是要批评他们,但是如果不了解其中的术语,还真不了解这些文件。<P><H2><A NAME="ss7.1">7.1 如何取得</A></H2><P>RedHat 、 Slackware 及 OpenLinux中即已经有 Apache。版本可能不是最新的,但二位元档绝对可靠。不幸的是,各种版本都使用不同的目录。<P>原始程序可从<A HREF="javascript:if(confirm('http://www.apache.org/dist/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.apache.org/dist/'" tppabs="http://www.apache.org/dist/">http://www.apache.org/dist/</A>取得。二位元档可从<A HREF="javascript:if(confirm('ftp://sunsite.unc.edu/pub/Linux/apps/www/servers/ \n\nThis file was not retrieved by Teleport Pro, because it did not meet the project\'s file type specifications. \n\nDo you want to open it from the server?'))window.location='ftp://sunsite.unc.edu/pub/Linux/apps/www/servers/'" tppabs="ftp://sunsite.unc.edu/pub/Linux/apps/www/servers/">ftp://sunsite.unc.edu/pub/Linux/apps/www/servers/</A>取得。使用RedHat的人还可以从<A HREF="javascript:if(confirm('ftp://ftp.redhat.com/pub/contrib/i386/ \n\nThis file was not retrieved by Teleport Pro, because it did not meet the project\'s file type specifications. \n\nDo you want to open it from the server?'))window.location='ftp://ftp.redhat.com/pub/contrib/i386/'" tppabs="ftp://ftp.redhat.com/pub/contrib/i386/">ftp://ftp.redhat.com/pub/contrib/i386/</A>取得RPM档。<P>如果你的服务器是用于商业用途,最好是从Apache的网页下载原始程序自行编译。也可以使用如 RedHat、 Slackware或 OpenLinux本来就附带的二位元档。如果你用其他执行档,其中可能会有骇客偷加的'後门'。也可能因为一些patch不够安定,而造成当机。如果自行编译,你还可以掌握实际编译进去的模块,你也可以决定要放在那一个目录中。编译并不难,而且从编译的过程中,你还能学到如何成为真正的Linux使用者;)<P><P><H2><A NAME="ss7.2">7.2 编译及安装</A></H2><P>首先将文件库打开[untar]。放入一暂存目录中,然後到src目录。如要加入特殊模块,就在此修改configuration档案[平常主要的模块已经加入了]。然後执行此configuration shell script(<CODE>./Configure</CODE>)。须确定它正确叙述你是在用Linux平台,而且以gcc为编译器。接下来,你可以修改http.h来改变预设的目录[放config档]预设为<CODE>/usr/local/etc/httpd/</CODE>,你可能会考虑简化为<CODE>/etc/httpd/</CODE>。服务器的根目录[放HTML首页]预设为<CODE>/usr/local/etc/httpd/htdocs/</CODE>,你也可能考虑改为<CODE>/home/httpd/html</CODE>[这个是RedHat的预设目录]。如果你要使用su-exec目录[参考後述的各项功能细说],你也可以考虑简化之。服务器的预设根目录还可以用config档来更改。如果Apache无法读到config档时,还是在http.h中定义编译後的根目录位置吧。其他的的预设目录都必须用config档案来修改。最後,在此执行make档来编译Apache。<P>如果因为遗漏include档案,而在编译时出问题,下面这些项目值得检查一下:确定已安装了适合你的核心系统版本的Kernel header[即include档案]。并检查下述的连结是正确的,<BLOCKQUOTE><CODE><PRE>/usr/include/linux should be a link to /usr/src/linux/include/linux/usr/include/asm should be a link to /usr/src/linux/include/asm/usr/src/linux should be a link to the Linux source directory (ex.linux-2.0.30)</PRE></CODE></BLOCKQUOTE>要连结档案可用<CODE>ln -s</CODE>指令。这和cp指令相类似,只是它连结而不是复制[<CODE>ln -s source-dir destination-link</CODE>]。<P>如果在执行make时没有问题,现在的目录中应有个叫httpd的执行档。把它移到bin目录中。<CODE>/usr/sbin</CODE>或<CODE>/usr/local/sbin</CODE>都可。<P>另外将conf.、logs及 icons三个次目录从src目录复制到服务器的home目录。然後将conf次目录中的三个档案名称修改一下,拿掉其中的<CODE>-dist</CODE>,[例:将<CODE>httpd.conf-dist</CODE>改成<CODE>/usr/local/sbin</CODE>]。<P>Apache中还有些支持程序。他们都在<CODE>support</CODE>目录中,都要各别编译并安装。大部份这些程序都可用该目录[你执行<CODE>configure</CODE> script时,已编译好了]中的makefile来编译。你使用Apache时,并不一定要用到这些程序,但其中有些可以简化系统管理员的工作。<P><H2><A NAME="ss7.3">7.3 设定</A></H2><P>此时在<CODE>conf</CODE>次目录中,你应该会有四个档案。其中,<CODE>httpd.conf</CODE>用来设定服务器守护神[port号码、使用者等..]。<CODE>srm.conf</CODE>用来设定root documen tree、 special handle等。而<CODE>access.conf</CODE>用来设定基本存取。最後,<CODE>mine.types</CODE>用来告诉服务器,那一个延伸档案名代表送给浏览器那一种mine型式。<P>一旦了解其中怪术语,你就会发现这些设定档中有许多附带说明。在你启用服务器之前,彻彻底底得读它一遍。其中的每一个项目在Apache文件中都有说明。<P><CODE>mine.types</CODE>档案并不是真正的设定档。服务器在送资料给浏览器之前,将延伸档案名译为mine型式。一般的 mine型式都已在此档案中了,大多情况下不须修改此一档案。未来一些日子以後,有一些新的mine型式开发出来以後,此时才真正要修改这一档案。<P>记著一点!每当你改变了设定档,就须重新启动Apache。不然也要用<CODE>kill</CODE>送一个SIGNUP讯号,来启动新的设定。这个讯号是要送到父程序而不是子程序。要查出父程序的代号有些方法,父程序的代号一般较小。父程序的代号也可从log次目录的<CODE>httpd.pid</CODE>档案中查到。而且如果你送<CODE>kill</CODE>给子程序,子程序死了,而父程序又会立刻产生一个子程序。<P>我不想带著你一步一步地去设定Apache。我想针对一些特殊的案例、选项及功能加以说明。强烈建议好好读一读Apache文件中的保全诀窍。它可以从<A HREF="javascript:if(confirm('http://www.apache.org/docs/mics/security_tips.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.apache.org/docs/mics/security_tips.html'" tppabs="http://www.apache.org/docs/mics/security_tips.html">http://www.apache.org/docs/mics/security_tips.html</A>下载。<P><H2><A NAME="ss7.4">7.4 建立虚拟网站主机</A></H2><P>虚拟主机用于一台电脑拥有数个网域名称的情况。老的方法是给每一虚拟主机一个专用的IP位址。新的方法只用一个共用的IP位址,但是如果浏览器不支持HTTP 1.1则没有用。<P>我建议,如果是用在商业上,先用老方法,直到人人的浏览器都支持HTTP 1.1时,再改用新方法。而且老方法的说明也较多。两种方法都有虚拟mail功能[这对吗?],但只有老方法才有虚拟FTP功能。<P>如果用在小组织或个人网页,你可考虑新的方法。它可以省去你昂贵的IP位址。<P>你还可以在同一服务器混合两种方法。相关细节参考Apacheweek:<A HREF="javascript:if(confirm('http://www.apacheweek.com/features/vhost \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.apacheweek.com/features/vhost'" tppabs="http://www.apacheweek.com/features/vhost">http://www.apacheweek.com/features/vhost</A>。<P><H3>专用IP位址[IP based]虚拟主机</H3><P>以此一方法,每一虚拟主机各有一个IP位址。使用每一请求[request]所送往之IP位址,Apache及其他程序,决定要用那一个网域来完成服务。这个步骤非常浪费IP空间。以我的虚拟网域所在的服务器来举例,他们都有35,000个虚拟帐号,也就是35,000个IP位址,但我相信只有不到50个服务器是真正在运作。<P>设定这种虚拟主机有两大步骤,第一是设定Linux,使它能接受两个以上的IP位址。其次,是设定Apache使它支持虚拟主机功能。<P>第一步骤,设定Linux,使它接受数个IP位址,这要建立一个新的核心系统,就是使它支援IP networking 及IP aliasing。[在2.0版及其後的版本,这步骤较容易]。编译核心的说明,参考<A HREF="javascript:if(confirm('http://sunsite.unc.edu/LDP/HOWTO/Kernel-HOWTO.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://sunsite.unc.edu/LDP/HOWTO/Kernel-HOWTO.html'" tppabs="http://sunsite.unc.edu/LDP/HOWTO/Kernel-HOWTO.html">kernel howto</A>。<P>第二步骤,要设定开机程序中的界面。如果你用的是Red Hat,可用控制台来设定。用root打开X-Windows,你应该可以看到控制台。双擎Network configuration,点选interface panel并选择你的Network card。点选底下的alias,填入资料,然後点选done。每一虚拟主机都要一一设定。<P>如果你不是用Red Hat,你就要用手动方式来设定,在<CODE>/etc/rc.d</CODE>目录中的<CODE>rc.local</CODE>档案中加入指令。每一设施都要有个<CODE>ifconfig</CODE>及<CODE>route</CODE>指令。同名设施为一主要设施的次设施。例如:eth0:1 、eth0:2等。下述为设定一同名设施的例子:<P><BLOCKQUOTE><CODE><PRE>ifconfig eth0:0 192.168.1.57route add -host 192.168.1.57 dev eth0:0</PRE></CODE></BLOCKQUOTE><P>还可以在ifconfig命令中加入broadcast address及netmask。如果有许多同名地址,可以用
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -