📄 windows.html
字号:
<p>要重启一个运行中的Apache服务,强制它重新读取配置文件,可以使用:</p>
<div class="example"><p><code>
apache -k restart
</code></p></div>
<p>默认情况下,Apache服务将被注册为以本地系统用户(<code>LocalSystem</code>帐号)身份运行。<code>LocalSystem</code>帐号没有网络权限,不能通过任何Windows安全机制访问网络,包括文件系统、命名管道、DCOM或secure RPC ,但是它对于本地资源却拥有广泛的特权。</p>
<div class="warning"><strong>永远不要把网络权限授予<code>LocalSystem</code>帐号!如果你需要Apache能够访问网络资源,最好按照下述方法为Apache另外建立一个单独的帐号。</strong></div>
<p>你应该建立一个单独的帐号来运行Apache服务。特别是在必须通过Apache访问网络资源的时候,我们更加强烈建议你这样做。</p>
<ol>
<li>创建一个普通域用户帐号,并牢记对应的密码。</li>
<li>授予这个新建的帐号<code>作为服务登陆</code>和<code>作为操作系统一部分运行</code>权限。在Windows 2000/XP/2003上你可以使用"组策略"或通过"本地安全策略"的MMC接口来完成这个操作。</li>
<li>确认新建的帐号是Users组的一个成员。</li>
<li>确认新建的帐号具有读取和执行(RX)所有文档和脚本目录(例如:<code>htdocs</code>和<code>cgi-bin</code>)的权限。</li>
<li>确认新建的帐号对Apache的<code>logs</code>目录具有读/写/删除(RWD)的权限。</li>
<li>确认新建的帐号对<code>Apache.exe</code>二进制文件具有读取和执行(RX)的权限。</li>
</ol>
<div class="note">一个很好的实践经验是赋予运行Apache服务的用户读取和执行(RX)整个Apache2目录的权限,并且对<code>logs</code>子目录具有读/写/删除(RWD)的权限。</div>
<p>如果你允许使用这个帐号作为一个用户和服务登录,你就可以用这个帐号登录上去测试执行脚本、读取web页的权限,还可以通过控制台窗口启动Apache 。如果这样工作正常,你又执行了上述的操作,那么Apache就能够正常地作为服务运行了。</p>
<div class="note"><strong>错误代码2186</strong>是一个很好的提示,说明你需要检查"登陆为"选项,因为服务器不能访问必要的网络资源。</div>
<p>当启动Apache服务时你可能会遇到一个来自Windows服务管理器的错误信息。 例如,如果你想使用控制面板中的服务小程序启动Apache,可能会得到下面这条信息:</p>
<div class="example"><p><code>
Could not start the Apache2 service on \\COMPUTER <br />
Error 1067; The process terminated unexpectedly.
</code></p></div>
<p>只要启动Apache出错你就会得到这个错误信息。为了弄清是什么引起了错误, 你应该遵循<a href="#wincons">作为控制台程序运行Apache</a>中的建议。</p>
<p>对于让Apache在Windows 9x下以类似Windows NT服务的方式运行有一些支持。都是<em>高度试验性</em>的,即使能够工作,Apache软件基金会将不会证实其可靠性和未来的支持。继续进行你自己的冒险吧!</p>
<p>这两种"服务"有相当大的区别:</p>
<p>如果你输入下列命令,Apache会尝试启动,如果成功他将在后台运行:</p>
<div class="example"><p><code>
Apache -n "服务名" -k start
</code></p></div>
<p>例如,通过桌面的快捷方式运行,如果服务启动成功一个控制台窗口会快速闪过并立刻消失。如果启动时Apache检测到比如<code>httpd.conf</code>文件中有不正确的设置这样的问题,则控制台窗口会保持可见。这样将显示一个有助于追踪错误原因的错误信息。</p>
<p>Windows 9x不支持<code>NET START</code>或者<code>NET STOP</code>命令,因此你在命令中必须使用Apache的服务控制选项。你可能希望为每个命令设置一个快捷方式以便你能够只需要从开始菜单或者桌面一点就能执行所需的操作。</p>
<p>Apache和Windows 9x没有提供让Apache服务以特定的具有网络权限的用户身份运行的支持。实际上,Windows 9x在本地机器上根本没有提供安全性。这就是Apache软件基金会从不支持使用Windows 9x作为公用httpd服务器的原因。这个便利存在的唯一目的是协助用户开发web内容和学习Apache服务器,或者也许在一个安全的、私有的网络上充当intranet服务器。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="wincons" id="wincons">作为控制台程序运行Apache</a></h2>
<p>虽然通常推荐将Apache作为服务来运行,但是在某些情况下从命令行运行反而更加容易。在Windows 9x上,从命令行运行Apache是推荐的方法,因为这些系统中缺乏可靠的服务支持。</p>
<p>可以使用下列命令将Apache作为控制台程序从命令行运行:</p>
<div class="example"><p><code>
apache
</code></p></div>
<p>Apache将会一直保持运行,直到被Ctl+C组合键中断。</p>
<p>你还可以在安装后通过 <code>开始按钮 --> 程序 --> Apache HTTP Server 2.2.xx --> Control Apache Server</code> 在控制台中运行Apache 。这将会打开一个控制台窗口并在其中启动Apache 。如果你没有将Apache安装为服务,该窗口将一直保持打开,直到被Ctl+C组合键中断,并在几秒钟后退出。如果你已经将Apache安装为服务,那么那个快捷方式将会启动服务,如果Apache服务已经启动了,则什么也不做。</p>
<p>你可以在另外一个控制台窗口中输入以下命令停止正在运行的Apache服务:</p>
<div class="example"><p><code>
apache -k shutdown
</code></p></div>
<p>这种方法比使用Ctl+C组合键更好,因为它可以让Apache完成所有当前的操作并且优雅的清理所占用的资源。</p>
<p>Apache可以被从新启动,这将导致它重新读取配置文件,重启前所有正在进行的操作都将不被打断的完成。可以使用下面的命令重启Apache :</p>
<div class="example"><p><code>
apache -k restart
</code></p></div>
<div class="note">请熟悉Unix版本Apache的用户注意,这些命令对应于Unix命令 <code>kill -TERM <em>pid</em></code> 和 <code>kill -USR1 <em>pid</em></code> 。命令中之所以使用 <code>-k</code> 选项,就是为了提醒用户这是源自Unix下的<code>kill</code>命令。</div>
<p>如果Apache控制台窗口在启动后出乎意料的立即关闭,请打开一个新的控制台窗口,切换到Apache的安装目录下bin子目录中,运行<code>apache</code>命令并读取错误信息。然后再到日志目录中查看<code>error.log</code>文件以寻找可能的配置错误。如果你的Apache采用的是默认安装,这些命令应当是:</p>
<div class="example"><p><code>
c: <br />
cd "\Program Files\Apache Group\Apache2\bin" <br />
apache
</code></p></div>
<p>等候Apache停止,或者使用Ctl+C组合键,然后输入下列内容:</p>
<div class="example"><p><code>
cd ..\logs <br />
more < error.log
</code></p></div>
<p>可以在命令行中为Apache指定一个配置文件,有两种方法可以在命令行中指定配置文件:</p>
<ul>
<li><p><code>-f</code> 可以指定一个绝对路径或相对路径的配置文件:</p>
<div class="example"><p><code>
apache -f "c:\my server files\anotherconfig.conf"
</code></p></div>
<p>或</p>
<div class="example"><p><code>
apache -f files\anotherconfig.conf
</code></p></div></li>
<li><p><code>-n</code> 可以指定已安装的Apache服务所使用的配置文件:</p>
<div class="example"><p><code>
apache -n "服务名"
</code></p></div>
</li>
</ul>
<p>在这两种情况下,必须在配置文件中设置正确的<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>值。</p>
<p>如果你没有使用 <code>-f</code> 或 <code>-n</code> 指定配置文件的路径,Apache将会使用硬编码在服务器内的路径,比如:<code>conf\httpd.conf</code> 。这个内置的路径是相对于安装目录的,要想检查这个内置的路径,你可以通过 <code>-V</code> 开关调用Apache ,查看名为<code>SERVER_CONFIG_FILE</code>的变量值:</p>
<div class="example"><p><code>
apache -V
</code></p></div>
<p>Apache将会按照下列顺序检查<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>值:</p>
<ol>
<li>通过 <code>-C</code> 命令行开关指定的<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>值。</li>
<li>通过 <code>-d</code> 命令行开关指定的值。</li>
<li>当前工作目录。</li>
<li>安装二进制文件时在注册表中登记的项目。</li>
<li>编译进二进制文件的值,该值默认为:<code>/apache</code> ,你可以使用 <code>apache -V</code> 命令查看显示出来的<code>HTTPD_ROOT</code>变量的值。</li>
</ol>
<p>在安装过程中,将会在注册表中新建一个版本特定的注册表键。这个键的位置取决于安装类型。如果你选择的是"for all users",那么将位于<code>HKEY_LOCAL_MACHINE</code>分支下,如下所示:</p>
<div class="example"><p><code>
HKEY_LOCAL_MACHINE\SOFTWARE\Apache Group\Apache\2.0.43
</code></p></div>
<p>如果你选择的是"for the current user only",那么将位于<code>HKEY_CURRENT_USER</code>分支下,其中的内容取决于当前登陆的用户,如下所示:</p>
<div class="example"><p><code>
HKEY_CURRENT_USER\SOFTWARE\Apache Group\Apache\2.0.43
</code></p></div>
<p>这个键已经被编译进了服务器,使得你可以测试新版本而又不影响老版本。当然,你必须注意不要在同一个目录中安装两个不同的版本。</p>
<p>如果你没有使用二进制安装,在某些情况下Apache将会抱怨注册表键丢失。如果在这种情况下服务器仍然可以找到正确的配置文件,那么就可以安全的忽略它。</p>
<p>这个注册表键其实就是包含<code>conf</code>子目录的<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>目录。Apache将要从中读取<code>httpd.conf</code>文件。如果该配置文件中又包含了一个<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>指令,并且指向的目录与注册表中登记的不同,Apache将以配置文件中的指令为准。如果你复制了配置文件或者整个Apache目录到一个新的位置,你要千万记得修改<code>httpd.conf</code>中的<code class="directive"><a href="../mod/core.html#serverroot">ServerRoot</a></code>指令,使其指向正确的位置。</p>
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="test" id="test">安装的测试</a></h2>
<p>启动Apache运行以后(不管是控制台窗口还是作为服务), 它会在80端口上进行监听(除非你改变了配置文件中的<code class="directive"><a href="../mod/mpm_common.html#listen">Listen</a></code>指令。 要连接到服务器访问默认页面,启动一个浏览器并输入下列URL :</p>
<div class="example"><p><code>
http://localhost/
</code></p></div>
<p>应该出现一个欢迎页面,并且页面上有到Apache用户手册的链接。 如果什么都没有发生或是得到了一个错误,检查<code>logs</code>子文件夹中的 <code>error.log</code>文件。如果你的主机没有联网或者DNS配置有严重问题,你也许需要输入这样的URL :</p>
<div class="example"><p><code>
http://127.0.0.1/
</code></p></div>
<p>如果你将Apache配置为在非80端口监听(比如:8080),你应当使用下面的URL明确指定端口:</p>
<div class="example"><p><code>
http://127.0.0.1:8080/
</code></p></div>
<p>一旦你的基本配置可以工作了,你应该编辑<code>conf</code>目录下的文件来恰当地配置Apache 。 此外,如果你改变了作为NT服务运行的Apache的配置,你应该首先尝试从命令行启动来保证能够正确地启动Apache服务。</p>
<p>因为Apache<strong>不能</strong>与其他TCP/IP应用程序共享同一端口,你可能需要先停止或者卸载或者重新配置某些特定的服务。这包括(但不限于)别的web服务器和BlackIce那样的防火墙。如果你只能在禁止其他服务的情况下启动Apache ,那么需要重新配置Apache或者其他程序使它们不监听同一个TCP/IP端口。</p>
</div></div>
<div id="footer">
<p class="apache">本文允许自由使用、分发、转载,但必须保留译者署名;详见:<a href="../translator_announcement.html#announcement">译者声明</a>。</p>
<p class="menu"><a href="../mod/index.html">模块索引</a> | <a href="../mod/directives.html">指令索引</a> | <a href="../faq/index.html">常见问题</a> | <a href="../glossary.html">词汇表</a> | <a href="../sitemap.html">站点导航</a></p></div>
</body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -