<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
<meta content="noindex, nofollow" name="robots" />
<!--
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
              This file is generated from xml source: DO NOT EDIT
        XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
      -->
<title>Frequently Asked Questions - Apache HTTP Server</title>
<link href="../style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" />
<link href="../style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" />
<link href="../style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" />
<link href="../images/favicon.ico" rel="shortcut icon" /></head>
<body id="manual-page"><div id="page-header">
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p>
<p class="apache">Apache HTTP Server Version 2.0</p>
<img alt="" src="../images/feather.gif" /></div>
<div class="up"><a href="./"><img title="&lt;-" alt="&lt;-" src="../images/left.gif" /></a></div>
<div id="path">
<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://httpd.apache.org/">HTTP Server</a> &gt; <a href="http://httpd.apache.org/docs/">Documentation</a> &gt; <a href="../">Version 2.0</a> &gt; <a href="./">FAQ</a></div><div id="page-content"><div class="retired"><h4>Please note</h4>
            <p>This document refers to the <strong>2.0</strong> version of Apache httpd, which <strong>is no longer maintained</strong>. Upgrade, and refer to the current version of httpd instead, documented at:</p>
        <ul><li><a href="http://httpd.apache.org/docs/current/">Current release version of Apache HTTP Server documentation</a></li></ul></div><div id="preamble"><h1>Frequently Asked Questions</h1>
<div class="toplang">
<p><span>Available Languages: </span><a href="../en/faq/all_in_one.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/faq/all_in_one.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/faq/all_in_one.html" hreflang="tr" rel="alternate" title="T&#252;rk&#231;e">&nbsp;tr&nbsp;</a></p>
</div>

    <p>The latest version of this FAQ is always available from the main Apache
    web site, at &lt;<a href="http://httpd.apache.org/docs/2.0/faq/">http://httpd.apache.org/docs/2.0/faq/</a>&gt;.</p>

    <p>Since Apache 2.0 is quite new, we don't yet know what the <em>Frequently
    Asked Questions</em> will be. While this section fills up, you should also
    consult the <a href="http://httpd.apache.org/docs/misc/FAQ.html">Apache 1.3
    FAQ</a> to see if your question is answered there.</p>
</div>
<div id="quickview"><ul id="toc"><li><img alt="" src="../images/down.gif" /> <a href="#topics">Topics</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#support">Support</a></li>
<li><img alt="" src="../images/down.gif" /> <a href="#error">Error Messages</a></li>
</ul></div>
<div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a id="topics" name="topics">Topics</a></h2>
<dl><dt><a href="#support">Support</a></dt><dd>What do I do when I have problems?</dd>
<dt><a href="#error">Error Messages</a></dt><dd>What does this error message mean?</dd>
</dl></div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="support" id="support">Support</a></h2>
    <ul>
    <li><a href="#support.what2do">"Why can't I ...? Why won't ... work?" What
    to do in case of problems</a></li>

    <li><a href="#support.support">Whom do I contact for support?</a></li>
    </ul>

    <h3><a name="support.what2do" id="support.what2do">"Why can't I ...? Why won't ... work?" What to do in case of
    problems</a></h3>
    

      <p>If you are having trouble with your Apache server software, you should
      take the following steps:</p>

      <dl>
      <dt>Check the errorlog!</dt>
      <dd>Apache tries to be helpful when it encounters a problem. In many
      cases, it will provide some details by writing one or messages to the
      server error log. Sometimes this is enough for you to diagnose &amp; fix
      the problem yourself (such as file permissions or the like). The default
      location of the error log is
      <code>/usr/local/apache2/logs/error_log</code>, but see the <code class="directive"><a href="../mod/core.html#errorlog">ErrorLog</a></code> directive in your config files for the
      location on your server.</dd>

      <dt>Check the <a href="http://httpd.apache.org/docs/2.0/faq/">FAQ</a>!</dt>
      <dd>The latest version of the Apache Frequently-Asked Questions list can
      always be found at the main Apache web site.</dd>

      <dt>Check the Apache bug database</dt>
      <dd>Most problems that get reported to The Apache Group are recorded in
      the <a href="http://httpd.apache.org/bug_report.html">bug database</a>.
      <strong>Please</strong> check the existing reports, open
      <strong>and</strong> closed, before adding one. If you find that your
      issue has already been reported, please <em>don't</em> add a "me, too"
      report. If the original report isn't closed yet, we suggest that you
      check it periodically. You might also consider contacting the original
      submitter, because there may be an email exchange going on about the
      issue that isn't getting recorded in the database.</dd>

      <dt><a id="support.what2do.user-support" name="support.what2do.user-support">Ask in a user support forum</a></dt>
      <dd><p>Apache has an active community of users who are willing to share
      their knowledge. Participating in this community is usually the best and
      fastest way to get answers to your questions and problems.</p>

      <p><a href="http://httpd.apache.org/userslist.html">Users
      mailing list</a></p>

      <p><a href="irc://irc.libera.chat/#httpd">#httpd</a> on 
      <a href="http://libera.chat">Libera.chat IRC</a> is available for 
      user support issues.</p>

      <p>USENET newsgroups:</p>

      <ul>
      <li>comp.infosystems.www.servers.unix
      [<a href="news:comp.infosystems.www.servers.unix">news</a>]
      [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.unix">google</a>]
      </li>

      <li>comp.infosystems.www.servers.ms-windows
      [<a href="news:comp.infosystems.www.servers.ms-windows">news</a>]
      [<a href="http://groups.google.com/groups?group=comp.infosystems.www.servers.ms-windows">google</a>]
      </li>

      <li>comp.infosystems.www.authoring.cgi
      [<a href="news:comp.infosystems.www.authoring.cgi">news</a>]
      [<a href="http://groups.google.com/groups?group=comp.infosystems.www.authoring.cgi">google</a>]
      </li>
      </ul></dd>

      <dt>If all else fails, report the problem in the bug database</dt>
      <dd><p>If you've gone through those steps above that are appropriate and
      have obtained no relief, then please <em>do</em> let the httpd developers
      know about the problem by <a href="http://httpd.apache.org/bug_report.html">logging a bug
      report</a>.</p>

      <p>If your problem involves the server crashing and generating a core
      dump, please include a backtrace (if possible). As an example,</p>

      <div class="example"><p><code>
        # cd <var>ServerRoot</var><br />
        # dbx <var>httpd</var> <var>core</var><br />
        (dbx) where
      </code></p></div>

      <p>(Substitute the appropriate locations for your <var>ServerRoot</var>
      and your <var>httpd</var> and <var>core</var> files. You may have to use
      <code>gdb</code> instead of <code>dbx</code>.)</p>
      </dd>
      </dl>
    

    <h3><a name="support.support" id="support.support">Whom do I contact for support?</a></h3>
      <p>With several million users and fewer than forty volunteer developers,
      we cannot provide personal support for Apache. For free support, we
      suggest participating in a <a href="#support.what2do.user-support">user forum</a>.</p>

    
</div><div class="top"><a href="#page-header"><img alt="top" src="../images/up.gif" /></a></div>
<div class="section">
<h2><a name="error" id="error">Error Messages</a></h2>
    <ul>
    <li><a href="#error.sendfile">Invalid argument:
    core_output_filter: writing data to the network</a></li>
    <li><a href="#error.acceptex">AcceptEx failed</a></li>
    <li><a href="#error.scriptheaders">Premature end of script 
    headers</a></li>
    </ul>

    <h3><a name="error.sendfile" id="error.sendfile">Invalid argument:
    core_output_filter: writing data to the network</a></h3>

    <p>Apache uses the <code>sendfile</code> syscall on platforms
    where it is available in order to speed sending of responses.
    Unfortunately, on some systems, Apache will detect the presence of
    <code>sendfile</code> at compile-time, even when it does not work
    properly.  This happens most frequently when using network or
    other non-standard file-system.</p>

    <p>Symptoms of this problem include the above message in the error
    log and zero-length responses to non-zero-sized files.  The
    problem generally occurs only for static files, since dynamic
    content usually does not make use of <code>sendfile</code>.</p>

    <p>To fix this problem, simply use the <code class="directive"><a href="../mod/core.html#enablesendfile">EnableSendfile</a></code> directive to disable
    <code>sendfile</code> for all or part of your server.  Also see
    the <code class="directive"><a href="../mod/core.html#enablemmap">EnableMMAP</a></code>, which can
    help with similar problems.</p>

    

    <h3><a name="error.acceptex" id="error.acceptex">AcceptEx Failed</a></h3>

    <p>If you get error messages related to the <code>AcceptEx</code> syscall
    on win32, see the <code class="directive"><a href="../mod/mpm_winnt.html#win32disableacceptex">Win32DisableAcceptEx</a></code>
    directive.</p>
    


    <h3><a name="error.scriptheaders" id="error.scriptheaders">Premature end of script 
    headers</a></h3>

    <p>Most problems with CGI scripts result in this message written in the
    error log together with an <code>Internal Server Error</code> delivered
    to the browser.  A guide to helping debug this type of problem is
    available in the <a href="../howto/cgi.html#troubleshoot">CGI
    tutorial</a>.</p>
    

</div></div>
<div class="bottomlang">
<p><span>Available Languages: </span><a href="../en/faq/all_in_one.html" title="English">&nbsp;en&nbsp;</a> |
<a href="../ko/faq/all_in_one.html" hreflang="ko" rel="alternate" title="Korean">&nbsp;ko&nbsp;</a> |
<a href="../tr/faq/all_in_one.html" hreflang="tr" rel="alternate" title="T&#252;rk&#231;e">&nbsp;tr&nbsp;</a></p>
</div><div id="footer">
<p class="apache">Copyright 2013 The Apache Software Foundation.<br />Licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>.</p>
<p class="menu"><a href="../mod/">Modules</a> | <a href="../mod/directives.html">Directives</a> | <a href="../faq/">FAQ</a> | <a href="../glossary.html">Glossary</a> | <a href="../sitemap.html">Sitemap</a></p></div>
</body></html>