aboutsummaryrefslogtreecommitdiff
path: root/zh_CN.GB2312/books/handbook/network-servers/chapter.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'zh_CN.GB2312/books/handbook/network-servers/chapter.sgml')
-rw-r--r--zh_CN.GB2312/books/handbook/network-servers/chapter.sgml470
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 &amp;&amp; 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 &gt; 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 &amp;&amp; make cleandir &amp;&amp; make depend &amp;&amp; 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 &amp;&amp; make cleandir &amp;&amp; make depend &amp;&amp; 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 &amp;&amp; make cleandir &amp;&amp; make depend &amp;&amp; make NOSHARED=yes all</userinput>
+&prompt.root; <userinput>cp named-xfer /etc/namedb/bin &amp;&amp; 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 &amp;&amp; make cleandir &amp;&amp; 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 &amp;&amp; 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 &amp;&amp; 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>&nbsp;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 &amp; PHP 的动态网站</title>
+ <para>在过去几年中, 越来越多的企业开始通过
+ Internet 以期扩大它们的收入和影响。 这也为交互式
+ web 内容提出了更多的要求。 尽管一些公司, 如 &microsoft;,
+ 提供了基于它们专有产品的解决方案,
+ 但开源社区也给出了自己的答案。 目前, 最为常用的动态 web
+ 内容实现两种方法是
+ <application>mod_perl</application> &amp;
+ <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 内容的需求日益增长。 尽管某些公司, 例如 &microsoft;,
- 在它们的商业产品中引入了一些解决方案,
- 但开放源代码团体也给出了自己的答案。 这其中,
- 使用的最为广泛的就是 <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
&lt;IfModule mod_php5.c&gt;
DirectoryIndex index.php index.html
&lt;/IfModule&gt;
-
&lt;IfModule mod_php5.c&gt;
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
&lt;/IfModule&gt;</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> 是一个流行的开源软件包,
它提供了针对 &microsoft.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>, 就可以用浏览器访问