diff options
Diffstat (limited to 'zh_CN.GB2312/books/handbook/network-servers/chapter.sgml')
-rw-r--r-- | zh_CN.GB2312/books/handbook/network-servers/chapter.sgml | 470 |
1 files changed, 229 insertions, 241 deletions
diff --git a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml index f8939a1982..cca056aa41 100644 --- a/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml +++ b/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml @@ -2,7 +2,7 @@ The FreeBSD Documentation Project The FreeBSD Simplified Chinese Project - Original Revision: 1.69 + Original Revision: 1.78 $FreeBSD$ --> @@ -97,6 +97,12 @@ <contrib>Contributed by </contrib> </author> </authorgroup> + <authorgroup> + <author> + <contrib>为 &os; 6.1-RELEASE 进行了更新, 由 </contrib> + <othername>The &os; Documentation Project</othername> + </author> + </authorgroup> </sect1info> <title> <application>inetd</application> <quote>超级服务器</quote></title> @@ -104,83 +110,69 @@ <sect2 id="network-inetd-overview"> <title>总览</title> - <para>&man.inetd.8; 被叫做 <quote>超级 Internet - 服务器</quote>, 因为它能够管理许多不同的服务程序的连接。 - 当 <application>inetd</application> 接到连入的连接时, - 它就会判断连接所需要启动的服务程序, 并运行它们, - 然后将连接转交给这些服务程序 (在启动程序时, - 这些程序的标准输入、输出和错误输出描述符被替换为连入的连接)。 - 与一个一个地运行单独的服务程序相比, - 只启动一个 <application>inetd</application> 能够削减平均的系统负荷。</para> - - <para>一般说来, <application>inetd</application> - 会被用来启动其他服务程序。 但一些非常简单的协议, + <para>&man.inetd.8; 有时也被称作 <quote>Internet + 超级服务器</quote>, 因为它可以为多种服务管理连接。 + 当 <application>inetd</application> 接到连接时, + 它能够确定连接所需的程序, 启动相应的进程, + 并把 socket 交给它 (服务 socket 会作为程序的标准输入、 + 输出和错误输出描述符)。 使用 + <application>inetd</application> 来运行那些负载不重的服务有助于降低系统负载, + 因为它不需要为每个服务都启动独立的服务程序。</para> + + <para>一般说来, <application>inetd</application> 主要用于启动其它服务程序, + 但它也有能力直接处理某些简单的服务, 例如 <application>chargen</application>、 <application>auth</application>, 以及 - <application>daytime</application>, - 则会由它自行处理。</para> + <application>daytime</application>。</para> - <para>这一节将介绍如何通过命令行选项, 以及配置文件 - <filename>/etc/inetd.conf</filename> 来配置 - <application>inetd</application> 的一些基本知识。</para> + <para>这一节将介绍关于如何通过命令行选项, 以及配置文件 + <filename>/etc/inetd.conf</filename> 来对 + <application>inetd</application> 进行配置的一些基础知识。</para> </sect2> <sect2 id="network-inetd-settings"> <title>设置</title> - <para><application>inetd</application> 通过 <filename>/etc/rc.conf</filename> - 系统进行初始化。<literal>inetd_enable</literal> 选项默认被设定为 - <literal>NO</literal>,不过可以通过<application>sysinstall</application>打开, - 如果选用中等安全的模板。在<filename>/etc/rc.conf</filename>中设定: + <para><application>inetd</application> 是通过 &man.rc.8; 系统启动的。 + <literal>inetd_enable</literal> 选项默认设为 + <literal>NO</literal>, 但可以在安装系统时, + 由用户根据需要通过 <application>sysinstall</application> 来打开。 将 <programlisting>inetd_enable="YES"</programlisting> 或 - <programlisting>inetd_enable="NO"</programlisting> - 可以激活或者禁止<application>inetd</application>在启动时加载。</para> - - <para>此外,可以通过<literal>inetd_flags</literal>把不同的 - 命令行参数传给<application>inetd</application>。</para> - </sect2> + <programlisting>inetd_enable="NO"</programlisting> 写入 + <filename>/etc/rc.conf</filename> 可以启用或禁用系统启动时 + <application>inetd</application> 的自动启动。 命令: + <programlisting>/etc/rc.d/inetd rcvar</programlisting> + 可以显示目前的设置。</para> + + <para>此外, 您还可以通过 + <literal>inetd_flags</literal> 参数来向 <application>inetd</application> + 传递额外的其它参数。</para> + </sect2> <sect2 id="network-inetd-cmdline"> <title>命令行选项</title> - <para><application>inetd</application> 语法:</para> - - <para><option> inetd [-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] - [-p filename] [-R rate] [configuration file]</option></para> - - <variablelist> - <varlistentry> - <term>-d</term> - - <listitem> - <para>打开调试选项。</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>-l</term> - - <listitem> - <para>记录成功的连接</para> - </listitem> - </varlistentry> + <para>与多数服务程序类似, <application>inetd</application> + 也提供了为数众多的用以控制其行为的参数。 完整的参数列表如下:</para> - <varlistentry> - <term>-w</term> + <para><command>inetd</command> <option>[-d] [-l] [-w] [-W] [-c maximum] [-C rate] [-a address | hostname] + [-p filename] [-R rate] [-s maximum] [configuration file]</option></para> - <listitem> - <para>为外部服务打开TCP Wrapping(默认)。</para> - </listitem> - </varlistentry> + <para>这些参数都可以通过 + <filename>/etc/rc.conf</filename> 的 + <literal>inetd_flags</literal> 选项来传给 <application>inetd</application>。 + 默认情况下, + <literal>inetd_flags</literal> 设为 + <literal>-wW -C 60</literal>, 者表示希望为 + <application>inetd</application> 的服务启用 TCP wrapping, + 并阻止来自同一 IP 每分钟超过 60 次的请求。</para> - <varlistentry> - <term>-W</term> - - <listitem> - <para>为<application>inetd</application>的内置服务打开TCP Wrapping (默认)。</para> - </listitem> - </varlistentry> + <para>初学的用户可能会很高兴地发现这些选项通常并不需要进行修改, + 前面提到的速率限制选项在您的服务器收到过量请求的连接时, + 则会有效地发挥作用。 完整的参数列表, + 可以在 &man.inetd.8; 联机手册中找到。</para> + <variablelist> <varlistentry> <term>-c maximum</term> @@ -210,75 +202,48 @@ </varlistentry> <varlistentry> - <term>-a</term> + <term>-s maximum</term> <listitem> - <para>指定绑定的IP地址。此外,可以使用主机名,这样系统就 - 可以根据主机名对应的IPV4或者IPV6来选择绑定地址。通常当 - <application>inetd</application> 在 &man.jail.8; 中运行 - 的时候指定主机名,这种情况下主机名来自 &man.jail.8; 环 - 境变量</para> - - <para>当使用主机名方式时,如果IPV4和IPV6都会被绑定到服务, - 那么,需要在<filename>/etc/inetd.conf</filename>.中为该服务 - 的每个对应协议添加一条记录。比如,一个TCP服务需要两条记录, - 一条使用<literal>tcp4</literal>,另一条使用<literal>tcp6</literal>。</para> - </listitem> - </varlistentry> - - <varlistentry> - <term>-p</term> - - <listitem> - <para>指定用来存放进程ID的文件。</para> + <para>指定同一 IP 同时请求同一服务时允许的最大值; 默认值为不限制。 + 您可以通过 <option>max-child-per-ip</option> + 参数来以服务为单位进行限制。</para> </listitem> </varlistentry> </variablelist> - - <para>以上选项在<filename>/etc/rc.conf</filename>中将可以 - 被<literal>inetd_flags</literal>开关传递给<application>inetd</application>。 - 默认情况下,<literal>inetd_flags</literal> 被置为 - <literal>-wW</literal>,也既是对<application>inetd</application>的内置或外部服务打开TCP wrapping. - 对于新手,通常不用去动这些参数,就算它们出现在<filename>/etc/rc.conf</filename>里头。</para> - - <note> - <para>对<application>inetd</application>而言,所谓外部服务是当 - 连接请求到来时,被调用并接受连接,启动于inetd之外的守护进程。 - 反之,内置服务则是那些<application>inetd</application>自己可 - 以完全处理的了。</para> - </note> - </sect2> <sect2 id="network-inetd-conf"> + <!-- XXX This section isn't very clear, and could do with some lovin' --> <title><filename>inetd.conf</filename></title> - <para><application>inetd</application>的配置通过 - <filename>/etc/inetd.conf</filename>文件进行控制。</para> + <para>对于 <application>inetd</application> 的配置, + 是通过 <filename>/etc/inetd.conf</filename> 文件来完成的。</para> - <para>当 - <filename>/etc/inetd.conf</filename>内容发生改变,可以 - 对<application>inetd</application>进程发送一个HangUP信号,以强制 - <application>inetd</application>重新读取配置文件,如下所示:</para> + <para>在修改了 + <filename>/etc/inetd.conf</filename> 之后, 可以使用下面的命令来强制 + <application>inetd</application> 重新读取配置文件:</para> - <example id="network-inetd-hangup"> - <title>对 <application>inetd</application>发送HangUP信号</title> + <example id="network-inetd-reread"> + <title>重新加载 <application>inetd</application> + 配置文件</title> - <screen>&prompt.root; <userinput>kill -HUP `cat /var/run/inetd.pid`</userinput></screen> + <screen>&prompt.root; <userinput>/etc/rc.d/inetd reload</userinput></screen> </example> - <para>配置文件中的每一行都是一个独立服务。如果要注释掉该服务,可以在行首加上 - <quote>#</quote>。<filename>/etc/inetd.conf</filename>的格式如下:</para> + <para>配置文件中的每一行都是一个独立的服务程序。 在这个文件中, 前面有 + <quote>#</quote> 的内容被认为是注释。 + <filename>/etc/inetd.conf</filename> 文件的格式如下:</para> <programlisting>service-name socket-type protocol -{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]] +{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]] user[:group][/login-class] server-program server-program-arguments</programlisting> - <para><application>ftpd</application>使用IPv4的例子:</para> + <para>下面是针对 IPv4 的 &man.ftpd.8; 服务的例子:</para> <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> @@ -349,7 +314,7 @@ server-program-arguments</programlisting> </varlistentry> <varlistentry> - <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute]]</term> + <term>{wait|nowait}[/max-child[/max-connections-per-ip-per-minute[/max-child-per-ip]]]</term> <listitem> <para><option>wait|nowait</option> 指明从<application>inetd</application> @@ -363,36 +328,44 @@ server-program-arguments</programlisting> <para>使用<option>max-child</option>选项可以设定针对服务, <application>inetd</application>可以派生出来的最大子进程数量。 如果某特定服务需要限定最高10个实例,把<literal>/10</literal> - 放到<option>nowait</option>后头就可以了。</para> - - <para>在<option>max-child</option>之外,还有一个开关可以限制 - 来自同一个地方,针对某个服务的最大连接数。这个开关就是: - <option>max-connections-per-ip-per-minute</option>。 - 比如,设定该值为10就可以限定单个IP地址去向某服务的连接最大 - 为每分钟十个。这个对于防止有意或者无意的资源耗尽或者拒绝服 - 务(DoS)颇有用处。</para> - - <para>在这部分,必须选择<option>wait</option>或 - <option>nowait</option>。 - <option>max-child</option>和 - <option>max-connections-per-ip-per-minute</option> 则为可有可无。</para> - - <para>一个stream-type多线程的服务,如果没有 - <option>max-child</option>或者 - <option>max-connections-per-ip-per-minute</option>需要, - 一般使用: <literal>nowait</literal>。</para> - - <para>同样的服务,如果需要限制最大连接数,则如下: - <literal>nowait/10</literal>。</para> - - <para>此外,如果要限制每分钟单个IP来访连接为20个,同时最多 - 派生10个进程,可以如下: + 放到<option>nowait</option>后头就可以了。 指定 <literal>/0</literal> + 表示不限制子进程的数量。</para> + + <para>除了 <option>max-child</option> 之外, + 还有两个选项可以限制来自同一位置到特定服务的最大连接数。 + <option>max-connections-per-ip-per-minute</option> 可以限制特定 IP + 地址每分钟的总连接数, 例如, 限制任何 + IP 地址每分钟最多连接十次。 <option>max-child-per-ip</option> + 则可以限制为某一 IP 地址在任何时候所启动的子进程数量。 + 这些选项对于防止针对服务器有意或无意的资源耗竭和拒绝服务 (DoS) + 攻击十分有用。</para> + + <para>这个字段中, 必须指定 <option>wait</option> 或 + <option>nowait</option> 两者之一。 而 + <option>max-child</option>、 + <option>max-connections-per-ip-per-minute</option> 和 + <option>max-child-per-ip</option> 则是可选项。</para> + + <para>流式多线程服务, 并且不配置任何 + <option>max-child</option>、 + <option>max-connections-per-ip-per-minute</option> 或 + <option>max-child-per-ip</option> 限制时, + 其配置为: <literal>nowait</literal>。</para> + + <para>同一个服务, 但希望将服务启动的数量限制为十个时, + 则是: <literal>nowait/10</literal>。</para> + + <para>同样配置, 限制每个 IP 地址每分钟最多连接二十次, + 而同时启动的子进程最多十个, 应写作: <literal>nowait/10/20</literal>。</para> - <para>以上开关都默认被使用在<application>fingerd</application>服务上面, - 如下所示:</para> + <para>下面是 &man.fingerd.8; 服务的默认配置:</para> <programlisting>finger stream tcp nowait/3/10 nobody /usr/libexec/fingerd fingerd -s</programlisting> + + <para>最后这个例子中, 将子进程数限制为 + 100 个, 而任意 IP 最多同时建立 5 个连接: + <literal>nowait/100/0/5</literal>。</para> </listitem> </varlistentry> @@ -435,35 +408,40 @@ server-program-arguments</programlisting> <sect2 id="network-inetd-security"> <title>Security</title> - <para>随安装时候选择的安全模式不同,部分<application>inetd</application>的服务 - 会被设为默认打开。如果没有确实的需要,禁止它们!只要在<filename>/etc/inetd.conf</filename>里头 - 需要禁止的服务前头加上<quote>#</quote>,然后<link linkend="network-inetd-hangup"> - 对inetd发送hangup信号</link>。某些服务,比如<application>fingerd</application>, - 由于对攻击者提供太多信息,可能对任何人都应该禁止。</para> - - <para>某些服务在安全上没有考虑,并且有一些连接超时检测设得很长或没有检测机制。 - 这回允许攻击者慢慢地发送连接,这样可以导致可用资源的消耗。在某些服务上面加上 - <option>max-connections-per-ip-per-minute</option>和<option>max-child</option> - 的限制似乎不错。</para> + <para>随安装时所选的模式不同, + 许多 <application>inetd</application> 的服务可能已经默认启用。 + 如果确实不需要某个特定的服务, 则应考虑禁用它。 + 在 <filename>/etc/inetd.conf</filename> 中, + 将对应服务的那行前面加上 <quote>#</quote>, + 然后 <link linkend="network-inetd-reread">重新加载 + inetd 配置</link> 就可以了。 某些服务, 例如 + <application>fingerd</application>, 可能是完全不需要的, + 因为它们提供的信息可能对攻击者有用。</para> + + <para>某些服务在设计时是缺少安全意识的, 或者有过长或压根没有连接请求的超时机制。 + 这使得攻击者能够通过缓慢地对这些服务发起连接, 并耗尽可用的资源。 + 对于这种情况, 设置 <option>max-connections-per-ip-per-minute</option>、 + <option>max-child</option> 或 <option>max-child-per-ip</option> 限制, + 来制约服务的行为是个好办法。</para> <para>默认情况下,TCP wrapping 是打开的。参考 - &man.hosts.access.5; 手册,以获得更多关于在各种<application>inetd</application> + &man.hosts.access.5; 手册,以获得更多关于在各种 <application>inetd</application> 调用的服务上设置TCP限制的信息。</para> </sect2> <sect2 id="network-inetd-misc"> <title>杂项</title> - <para><application>daytime</application>, - <application>time</application>, - <application>echo</application>, - <application>discard</application>, - <application>chargen</application>, 和 - <application>auth</application> 都是<application>inetd</application>内置的服务。</para> + <para><application>daytime</application>、 + <application>time</application>、 + <application>echo</application>、 + <application>discard</application>、 + <application>chargen</application>, 以及 + <application>auth</application> 都是由 <application>inetd</application> + 提供的内建服务。</para> - <para><application>auth</application>服务提供 - identity (<application>ident</application>, - <application>identd</application>)网络服务,并且某种程度上可配置。</para> + <para><application>auth</application> 服务提供了网络身份服务, + 它可以配置为提供不同级别的服务, 而其它服务则通常只能简单的打开或关闭。</para> <para>参考 &man.inetd.8; 手册获得更多信息。</para> </sect2> @@ -489,8 +467,9 @@ server-program-arguments</programlisting> <title>网络文件系统(NFS)</title> <indexterm><primary>NFS</primary></indexterm> - <para>网络文件系统是FreeBSD支持的文件系统中的一种,也被称为<acronym role="Network - File System">NFS</acronym>. <acronym role="Network File + <para>网络文件系统是FreeBSD支持的文件系统中的一种, + 也被称为 <acronym role="Network + File System">NFS</acronym>。 <acronym role="Network File System">NFS</acronym>允许一个系统在网络上与它人共享目录和文件。通过使用<acronym role="Network File System">NFS</acronym>,用户和程序可以象访问本地文件 一样访问远端系统上的文件。</para> @@ -659,7 +638,7 @@ mountd_flags="-r"</programlisting> 请确认客户端在您的 <filename>/etc/exports</filename> 被列出。 </para> <para>在 <filename>/etc/exports</filename> 里头,每一行里面,输出信息和文件系统一一对应。 - 一个远程主机每次只能对应一个文件系统。而且只能有一个默认入口。比如,假设 + 一个远程主机每次只能对应一个文件系统。而且只能有一个默认入口。比如,假设 <filename>/usr</filename> 是独立的文件系统。这个 <filename>/etc/exports</filename> 就是无效的:</para> <programlisting># Invalid when /usr is one file system @@ -667,15 +646,15 @@ mountd_flags="-r"</programlisting> /usr/ports client</programlisting> <para>一个文件系统,<filename>/usr</filename>, 有两行指定输出到同一主机, - <hostid>client</hostid>. - 解决这一问题的正确的格式是:</para> + <hostid>client</hostid>. + 解决这一问题的正确的格式是:</para> <programlisting>/usr/src /usr/ports client</programlisting> - <para>The properties of one filesystem exported to a given host + <para>The properties of one file system exported to a given host must all occur on one line. Lines without a client specified are treated as a single host. This limits how you can export - filesystems, but for most people this is not an issue.</para> + file systems, but for most people this is not an issue.</para> <para>下面是一个有效输出列表的例子, <filename>/usr</filename> and <filename>/exports</filename> @@ -1747,7 +1726,7 @@ basie&prompt.root;</screen> <para>假设您在实验室中成功地部署 NIS 引起了上司的兴趣。 您接下来的任务是将 NIS 域扩展, 以覆盖校园中的一些其他的机器。 - 下面两个表哥中包括了新用户和新机器, 及其简要说明。</para> + 下面两个表格中包括了新用户和新机器, 及其简要说明。</para> <informaltable frame="none" pgwide="1"> <tgroup cols="2"> @@ -2743,7 +2722,6 @@ host mailhost { 要比根域更小一样。 主机名的格局和文件系统类似: <filename>/dev</filename> 目录在根目录中, 等等。</para> - </sect2> <sect2> @@ -2959,12 +2937,6 @@ zone "0.0.127.IN-ADDR.ARPA" { file "localhost.rev"; }; -zone -"0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.IP6.INT" { - type master; - file "localhost.rev"; -}; - // NB: Do not use the IP addresses below, they are faked, and only // serve demonstration/documentation purposes! // @@ -3331,11 +3303,11 @@ www IN CNAME @</programlisting> <listitem> <para>重新组织基本的域和配置文件:</para> <screen>&prompt.root; <userinput>cp /etc/localtime etc</userinput><co id="localtime"> -&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput> +&prompt.root; <userinput>mv named.conf etc && ln -sf etc/named.conf</userinput> &prompt.root; <userinput>mv named.root master</userinput> <!-- I don't like this next bit --> &prompt.root; <userinput>sh make-localhost</userinput> -&prompt.root; <userinput>cat > master/named.localhost +&prompt.root; <userinput>cat > master/named.localhost $ORIGIN localhost. $TTL 6h @ IN SOA localhost. postmaster.localhost. ( @@ -3366,12 +3338,12 @@ $TTL 6h <application>named-xfer</application>, 并将其复制到沙盒中:</para> <screen>&prompt.root; <userinput>cd /usr/src/lib/libisc</userinput> -&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> &prompt.root; <userinput>cd /usr/src/lib/libbind</userinput> -&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make all</userinput> &prompt.root; <userinput>cd /usr/src/libexec/named-xfer</userinput> -&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput> -&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"></screen> +&prompt.root; <userinput>make cleandir && make cleandir && make depend && make NOSHARED=yes all</userinput> +&prompt.root; <userinput>cp named-xfer /etc/namedb/bin && chmod 555 /etc/namedb/bin/named-xfer</userinput><co id="clean-cruft"></screen> <para>在把静态连接的 <command>named-xfer</command> 装好之后需要清理一下, @@ -3388,11 +3360,11 @@ $TTL 6h <callout arearefs="clean-cruft"> <para>据说这一步有时会失败。 如果您遇到这样的问题, 执行下面的命令:</para> - <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen> + <screen>&prompt.root; <userinput>cd /usr/src && make cleandir && make cleandir</userinput></screen> <para>并删除 <filename>/usr/obj</filename> 目录:</para> - <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen> + <screen>&prompt.root; <userinput>rm -fr /usr/obj && mkdir /usr/obj</userinput></screen> <para>这将把任何 <quote>垃圾</quote> 从您的源代码目录中删除, 而后续工作将得以正常进行。</para> @@ -3408,7 +3380,7 @@ $TTL 6h <para>做一个 <application>named</application> 能够看到并写入的 <filename>dev/null</filename>:</para> - <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput> + <screen>&prompt.root; <userinput>cd /etc/namedb/dev && mknod null c 2 2</userinput> &prompt.root; <userinput>chmod 666 null</userinput></screen> </listitem> @@ -3492,12 +3464,6 @@ zone "0.0.127.in-addr.arpa" IN { allow-transfer { localhost; }; notify no; }; -zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.int" { - type master; - file "master/localhost-v6.rev"; - allow-transfer { localhost; }; - notify no; -}; zone "." IN { type hint; file "master/named.root"; @@ -3809,7 +3775,7 @@ zone "0.168.192.in-addr.arpa" { 安装盘上找到。 如果没有在首次安装时附带安装 <application>Apache</application>, 则可以通过 <filename role="package">www/apache13</filename> 或 <filename - role="package">www/apache2</filename> port 来安装。</para> + role="package">www/apache20</filename> port 来安装。</para> <para>一旦成功地安装了 <application>Apache</application>, 就必须对其进行配置。</para> @@ -4016,7 +3982,7 @@ DocumentRoot /www/someotherdomain.tld role="package">www/apache13-modssl</filename> port 来进行。 SSL 支持已经作为 <application>Apache</application> 2.X 的一部分提供, 您可以通过 - <filename role="package">www/apache2</filename> port 来安装后者。</para> + <filename role="package">www/apache20</filename> port 来安装后者。</para> <!-- XXX add more information about configuring mod_ssl here. --> <!-- Generating keys, getting the key signed, setting up your secure --> @@ -4024,9 +3990,23 @@ DocumentRoot /www/someotherdomain.tld </sect3> <sect3> + <title>使用 Perl & PHP 的动态网站</title> + <para>在过去几年中, 越来越多的企业开始通过 + Internet 以期扩大它们的收入和影响。 这也为交互式 + web 内容提出了更多的要求。 尽管一些公司, 如 µsoft;, + 提供了基于它们专有产品的解决方案, + 但开源社区也给出了自己的答案。 目前, 最为常用的动态 web + 内容实现两种方法是 + <application>mod_perl</application> & + <application>mod_php</application>。</para> + + <sect4> <title>mod_perl</title> - <indexterm><primary>Perl</primary></indexterm> + <indexterm> + <primary>mod_perl</primary> + <secondary>Perl</secondary> + </indexterm> <para><application>Apache</application>/Perl 集成计划, 将 Perl 程序设计语言的强大功能, 与 <application>Apache @@ -4036,16 +4016,23 @@ DocumentRoot /www/someotherdomain.tld 此外, 服务器中嵌入的持久性解释器, 消除了由于启动外部的解释器为 Perl 脚本的启动所造成的性能损失。</para> - <para>如果您还没有安装 - <application>Apache</application>, - 也可以通过 <filename - role="package">www/apache13-modperl</filename> port 来安装包含了 - <application>mod_perl</application> 的 <application>Apache</application> - 版本。</para> - </sect3> + <para><application>mod_perl</application> 通过多种方式提供。 + 要使用 <application>mod_perl</application>, + 应该注意 <application>mod_perl</application> 1.0 + 只能配合 <application>Apache</application> 1.3 而 + <application>mod_perl</application> 2.0 只能配合 + <application>Apache</application> 2 使用。 + <application>mod_perl</application> 1.0 可以通过 + <filename role="package">www/mod_perl</filename> 安装, + 而以静态方式联编的版本, 则可以通过 + <filename role="package">www/apache13-modperl</filename> + 来安装。 + <application>mod_perl</application> 2.0 则可以通过 + <filename role="package">www/mod_perl2</filename> 安装。</para> + </sect4> - <sect3> - <sect3info> + <sect4> + <sect4info> <authorgroup> <author> <firstname>Tom</firstname> @@ -4053,67 +4040,68 @@ DocumentRoot /www/someotherdomain.tld <contrib>Written by </contrib> </author> </authorgroup> - </sect3info> - <title>PHP</title> - - <indexterm><primary>PHP</primary></indexterm> - - <para>在过去的几年中, 更多的企业开始转向 - Internet, 以期扩大它们的收入和影响。 这也使得交互式 - web 内容的需求日益增长。 尽管某些公司, 例如 µsoft;, - 在它们的商业产品中引入了一些解决方案, - 但开放源代码团体也给出了自己的答案。 这其中, - 使用的最为广泛的就是 <acronym>PHP</acronym>。</para> - - <para>PHP, 也成为 <quote>Hypertext Preprocessor</quote>, - 是一种通用的脚本语言, 并且特别适合于 Web 开发。 - 它能够很容易地嵌入到 - <acronym>HTML</acronym> 之中, 其语法接近于 C、 &java;、 - 以及 Perl, 以期让 web 开发人员能够迅速地写出动态生成的 - web 页面。</para> - - <para>要获得 <application>Apache</application> web - 服务器的 <acronym>PHP</acronym>5 支持, 可以从安装 + </sect4info> + <title>mod_php</title> + + <indexterm> + <primary>mod_php</primary> + <secondary>PHP</secondary> + </indexterm> + + <para><acronym>PHP</acronym>, 也称为 <quote>PHP: + Hypertext Preprocessor</quote>, + 是一种通用的脚本语言, 并且特别适合于 Web 开发。 + 它能够很容易地嵌入到 <acronym>HTML</acronym> 之中, + 其语法接近于 C、 &java;, 以及 Perl, 以期让 web + 开发人员的一迅速撰写动态生成的页面。</para> + + <para>要获得用于 + <application>Apache</application> web 服务器的 + <acronym>PHP</acronym>5 支持, 可以从安装 <filename role="package">www/mod_php5</filename> port 开始。</para> - <para>这样, 将安装并配置用于支持动态 web 应用所需要的模块。 - 请再次检查, 以确认在 + <para>上述操作将安装并配置用于支持动态 <acronym>PHP</acronym> 应用程序所需的模块。 + 请检查并确认在 <filename>/usr/local/etc/apache/httpd.conf</filename> - 中添加了下面的配置:</para> + 中已经加入了下面的小节:</para> - <programlisting>LoadModule php5_module libexec/apache/libphp5.so -AddModule mod_php5.c + <programlisting>LoadModule php5_module libexec/apache/libphp5.so</programlisting> + + <programlisting>AddModule mod_php5.c <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> - <IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps </IfModule></programlisting> - <para>准备停当, 简单地使用 - <command>apachectl</command> 命令完成一次优雅的 (graceful) - 服务重启:</para> + <para>这些工作完成之后, 还需要使用 + <command>apachectl</command> 命令来完成一次 graceful + restart 以便加载 <acronym>PHP</acronym> 模块:</para> <screen>&prompt.root; <userinput>apachectl graceful</userinput></screen> - <para>在 &os; 中的 <acronym>PHP</acronym> 支持是极端模块化的。 - 如果需要安装某个扩展, 管理员只需安装相应的 port, - 并像上面所建议的那样重新启动 <application>Apache</application> - 就可以了。</para> + <para>在 &os; 中的 <acronym>PHP</acronym> 支持是高度模块化的, + 因此基本安装的功能十分有限。 增加其他功能的支持非常简单, 只需通过 + <filename role="package">lang/php5-extensions</filename> port + 即可完成。 这个 port 提供了一个菜单驱动的界面来帮助完成 + <acronym>PHP</acronym> 扩展的安装。 另外, 也可以通过对应的 port + 来单独安装扩展。</para> <para>例如, 要将对于 <application>MySQL</application> 数据库服务器的支持加入 <acronym>PHP</acronym>5, 只需简单地安装 <filename role="package">databases/php5-mysql</filename> - 并执行下面的命令:</para> + port。</para> - <screen>&prompt.root; <userinput>apachectl graceful</userinput></screen> + <para>安装完扩展之后, 必须重新启动 + <application>Apache</application> 服务器, + 来令其适应新的配置变更:</para> - <para>这样, 就启用了 <acronym>PHP</acronym> - 的 <application>MySQL</application> 支持。</para> + <screen>&prompt.root; <userinput>apachectl graceful</userinput></screen> + </sect4> </sect3> </sect2> </sect1> @@ -4187,9 +4175,9 @@ AddModule mod_php5.c <programlisting>ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l</programlisting> - <para>如 <xref linkend="network-inetd-hangup"> 所介绍的那样, - 修改这个文件之后, 需要向 <application>inetd</application> 发送 - HangUP 信号。</para> + <para>如 <xref linkend="network-inetd-reread"> 所介绍的那样, + 修改这个文件之后, 必须让 <application>inetd</application> 重新加载它, + 才能使新的设置生效。</para> <para>现在可以通过输入下面的命令来登录您的 FTP 服务器了:</para> @@ -4253,7 +4241,7 @@ AddModule mod_php5.c <sect2> <title>纵览</title> - <para><application>Samba</application> 是一个流行的开远软件包, + <para><application>Samba</application> 是一个流行的开源软件包, 它提供了针对 µsoft.windows; 客户机的文件和打印服务。 这类客户机可以连接并使用 FreeBSD 系统上的文件空间, 就如同使用本地的磁盘一样, 或者像使用本地打印机一样使用 @@ -4295,9 +4283,9 @@ AddModule mod_php5.c 来配置 <application>Samba</application>:</para> <programlisting>swat stream tcp nowait/400 root /usr/local/sbin/swat</programlisting> - <para>如同 <xref linkend="network-inetd-hangup"> 中介绍的那样, - 修改配置文件之后, 需要向 <application>inetd</application> 发送 - HangUP 信号。</para> + <para>如 <xref linkend="network-inetd-reread"> 中所介绍的那样, + 在修改了这个配置文件之后, 必须让 <application>inetd</application> + 重新加载配置, 才能使其生效。</para> <para>一旦在 <filename>inetd.conf</filename> 中启用了 <application>swat</application>, 就可以用浏览器访问 |