1<?xml version="1.0" encoding="ISO-8859-1"?> 2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 3<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head><!-- 4 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 5 This file is generated from xml source: DO NOT EDIT 6 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 7 --> 8<title>Security Tips - Apache HTTP Server</title> 9<link href="/style/css/manual.css" rel="stylesheet" media="all" type="text/css" title="Main stylesheet" /> 10<link href="/style/css/manual-loose-100pc.css" rel="alternate stylesheet" media="all" type="text/css" title="No Sidebar - Default font size" /> 11<link href="/style/css/manual-print.css" rel="stylesheet" media="print" type="text/css" /><link rel="stylesheet" type="text/css" href="/style/css/prettify.css" /> 12<script src="/style/scripts/prettify.min.js" type="text/javascript"> 13</script> 14 15<link href="/images/favicon.ico" rel="shortcut icon" /></head> 16<body id="manual-page"><div id="page-header"> 17<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p> 18<p class="apache">Apache HTTP Server Version 2.4</p> 19<img alt="" src="/images/feather.gif" /></div> 20<div class="up"><a href="./"><img title="<-" alt="<-" src="/images/left.gif" /></a></div> 21<div id="path"> 22<a href="http://www.apache.org/">Apache</a> > <a href="http://httpd.apache.org/">HTTP Server</a> > <a href="http://httpd.apache.org/docs/">Documentation</a> > <a href="../">Version 2.4</a> > <a href="./">Miscellaneous Documentation</a></div><div id="page-content"><div id="preamble"><h1>Security Tips</h1> 23<div class="toplang"> 24<p><span>Available Languages: </span><a href="/en/misc/security_tips.html" title="English"> en </a> | 25<a href="/fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 26<a href="/ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 27<a href="/tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </a></p> 28</div> 29 30 <p>Some hints and tips on security issues in setting up a web server. 31 Some of the suggestions will be general, others specific to Apache.</p> 32 </div> 33<div id="quickview"><ul id="toc"><li><img alt="" src="/images/down.gif" /> <a href="#uptodate">Keep up to Date</a></li> 34<li><img alt="" src="/images/down.gif" /> <a href="#dos">Denial of Service (DoS) attacks</a></li> 35<li><img alt="" src="/images/down.gif" /> <a href="#serverroot">Permissions on ServerRoot Directories</a></li> 36<li><img alt="" src="/images/down.gif" /> <a href="#ssi">Server Side Includes</a></li> 37<li><img alt="" src="/images/down.gif" /> <a href="#cgi">CGI in General</a></li> 38<li><img alt="" src="/images/down.gif" /> <a href="#nsaliasedcgi">Non Script Aliased CGI</a></li> 39<li><img alt="" src="/images/down.gif" /> <a href="#saliasedcgi">Script Aliased CGI</a></li> 40<li><img alt="" src="/images/down.gif" /> <a href="#dynamic">Other sources of dynamic content</a></li> 41<li><img alt="" src="/images/down.gif" /> <a href="#dynamicsec">Dynamic content security</a></li> 42<li><img alt="" src="/images/down.gif" /> <a href="#systemsettings">Protecting System Settings</a></li> 43<li><img alt="" src="/images/down.gif" /> <a href="#protectserverfiles">Protect Server Files by Default</a></li> 44<li><img alt="" src="/images/down.gif" /> <a href="#watchyourlogs">Watching Your Logs</a></li> 45<li><img alt="" src="/images/down.gif" /> <a href="#merging">Merging of configuration sections</a></li> 46</ul><ul class="seealso"><li><a href="#comments_section">Comments</a></li></ul></div> 47<div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 48<div class="section"> 49<h2><a name="uptodate" id="uptodate">Keep up to Date</a></h2> 50 51 <p>The Apache HTTP Server has a good record for security and a 52 developer community highly concerned about security issues. But 53 it is inevitable that some problems -- small or large -- will be 54 discovered in software after it is released. For this reason, it 55 is crucial to keep aware of updates to the software. If you have 56 obtained your version of the HTTP Server directly from Apache, we 57 highly recommend you subscribe to the <a href="http://httpd.apache.org/lists.html#http-announce">Apache 58 HTTP Server Announcements List</a> where you can keep informed of 59 new releases and security updates. Similar services are available 60 from most third-party distributors of Apache software.</p> 61 62 <p>Of course, most times that a web server is compromised, it is 63 not because of problems in the HTTP Server code. Rather, it comes 64 from problems in add-on code, CGI scripts, or the underlying 65 Operating System. You must therefore stay aware of problems and 66 updates with all the software on your system.</p> 67 68 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 69<div class="section"> 70<h2><a name="dos" id="dos">Denial of Service (DoS) attacks</a></h2> 71 72 73 74 <p>All network servers can be subject to denial of service attacks 75 that attempt to prevent responses to clients by tying up the 76 resources of the server. It is not possible to prevent such 77 attacks entirely, but you can do certain things to mitigate the 78 problems that they create.</p> 79 80 <p>Often the most effective anti-DoS tool will be a firewall or 81 other operating-system configurations. For example, most 82 firewalls can be configured to restrict the number of simultaneous 83 connections from any individual IP address or network, thus 84 preventing a range of simple attacks. Of course this is no help 85 against Distributed Denial of Service attacks (DDoS).</p> 86 87 <p>There are also certain Apache HTTP Server configuration 88 settings that can help mitigate problems:</p> 89 90 <ul> 91 <li>The <code class="directive"><a href="/mod/mod_reqtimeout.html#requestreadtimeout">RequestReadTimeout</a></code> 92 directive allows to limit the time a client may take to send the 93 request.</li> 94 95 <li>The <code class="directive"><a href="/mod/core.html#timeout">TimeOut</a></code> directive 96 should be lowered on sites that are subject to DoS attacks. 97 Setting this to as low as a few seconds may be appropriate. 98 As <code class="directive"><a href="/mod/core.html#timeout">TimeOut</a></code> is currently 99 used for several different operations, setting it to a low value 100 introduces problems with long running CGI scripts.</li> 101 102 <li>The <code class="directive"><a href="/mod/core.html#keepalivetimeout">KeepAliveTimeout</a></code> 103 directive may be also lowered on sites that are subject to DoS 104 attacks. Some sites even turn off the keepalives completely via 105 <code class="directive"><a href="/mod/core.html#keepalive">KeepAlive</a></code>, which has of course 106 other drawbacks on performance.</li> 107 108 <li>The values of various timeout-related directives provided by 109 other modules should be checked.</li> 110 111 <li>The directives 112 <code class="directive"><a href="/mod/core.html#limitrequestbody">LimitRequestBody</a></code>, 113 <code class="directive"><a href="/mod/core.html#limitrequestfields">LimitRequestFields</a></code>, 114 <code class="directive"><a href="/mod/core.html#limitrequestfieldsize">LimitRequestFieldSize</a></code>, 115 <code class="directive"><a href="/mod/core.html#limitrequestline">LimitRequestLine</a></code>, and 116 <code class="directive"><a href="/mod/core.html#limitxmlrequestbody">LimitXMLRequestBody</a></code> 117 should be carefully configured to limit resource consumption 118 triggered by client input.</li> 119 120 <li>On operating systems that support it, make sure that you use 121 the <code class="directive"><a href="/mod/core.html#acceptfilter">AcceptFilter</a></code> directive 122 to offload part of the request processing to the operating 123 system. This is active by default in Apache httpd, but may 124 require reconfiguration of your kernel.</li> 125 126 <li>Tune the <code class="directive"><a href="/mod/mpm_common.html#maxrequestworkers">MaxRequestWorkers</a></code> directive to allow 127 the server to handle the maximum number of simultaneous 128 connections without running out of resources. See also the <a href="perf-tuning.html">performance tuning 129 documentation</a>.</li> 130 131 <li>The use of a threaded <a href="/mpm.html">mpm</a> may 132 allow you to handle more simultaneous connections, thereby 133 mitigating DoS attacks. Further, the 134 <code class="module"><a href="/mod/event.html">event</a></code> mpm 135 uses asynchronous processing to avoid devoting a thread to each 136 connection. Due to the nature of the OpenSSL library the 137 <code class="module"><a href="/mod/event.html">event</a></code> mpm is currently incompatible with 138 <code class="module"><a href="/mod/mod_ssl.html">mod_ssl</a></code> and other input filters. In these 139 cases it falls back to the behaviour of the 140 <code class="module"><a href="/mod/worker.html">worker</a></code> mpm.</li> 141 142 <li>There are a number of third-party modules available through 143 <a href="http://modules.apache.org/">http://modules.apache.org/</a> 144 that can restrict certain client behaviors and thereby mitigate 145 DoS problems.</li> 146 147 </ul> 148 149 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 150<div class="section"> 151<h2><a name="serverroot" id="serverroot">Permissions on ServerRoot Directories</a></h2> 152 153 154 155 <p>In typical operation, Apache is started by the root user, and it 156 switches to the user defined by the <code class="directive"><a href="/mod/mod_unixd.html#user">User</a></code> directive to serve hits. As is the 157 case with any command that root executes, you must take care that it is 158 protected from modification by non-root users. Not only must the files 159 themselves be writeable only by root, but so must the directories, and 160 parents of all directories. For example, if you choose to place 161 ServerRoot in <code>/usr/local/apache</code> then it is suggested that 162 you create that directory as root, with commands like these:</p> 163 164 <div class="example"><p><code> 165 mkdir /usr/local/apache <br /> 166 cd /usr/local/apache <br /> 167 mkdir bin conf logs <br /> 168 chown 0 . bin conf logs <br /> 169 chgrp 0 . bin conf logs <br /> 170 chmod 755 . bin conf logs 171 </code></p></div> 172 173 <p>It is assumed that <code>/</code>, <code>/usr</code>, and 174 <code>/usr/local</code> are only modifiable by root. When you install the 175 <code class="program"><a href="/programs/httpd.html">httpd</a></code> executable, you should ensure that it is 176 similarly protected:</p> 177 178 <div class="example"><p><code> 179 cp httpd /usr/local/apache/bin <br /> 180 chown 0 /usr/local/apache/bin/httpd <br /> 181 chgrp 0 /usr/local/apache/bin/httpd <br /> 182 chmod 511 /usr/local/apache/bin/httpd 183 </code></p></div> 184 185 <p>You can create an htdocs subdirectory which is modifiable by other 186 users -- since root never executes any files out of there, and shouldn't 187 be creating files in there.</p> 188 189 <p>If you allow non-root users to modify any files that root either 190 executes or writes on then you open your system to root compromises. 191 For example, someone could replace the <code class="program"><a href="/programs/httpd.html">httpd</a></code> binary so 192 that the next time you start it, it will execute some arbitrary code. If 193 the logs directory is writeable (by a non-root user), someone could replace 194 a log file with a symlink to some other system file, and then root 195 might overwrite that file with arbitrary data. If the log files 196 themselves are writeable (by a non-root user), then someone may be 197 able to overwrite the log itself with bogus data.</p> 198 199 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 200<div class="section"> 201<h2><a name="ssi" id="ssi">Server Side Includes</a></h2> 202 203 204 205 <p>Server Side Includes (SSI) present a server administrator with 206 several potential security risks.</p> 207 208 <p>The first risk is the increased load on the server. All 209 SSI-enabled files have to be parsed by Apache, whether or not 210 there are any SSI directives included within the files. While this 211 load increase is minor, in a shared server environment it can become 212 significant.</p> 213 214 <p>SSI files also pose the same risks that are associated with CGI 215 scripts in general. Using the <code>exec cmd</code> element, SSI-enabled 216 files can execute any CGI script or program under the permissions of the 217 user and group Apache runs as, as configured in 218 <code>httpd.conf</code>.</p> 219 220 <p>There are ways to enhance the security of SSI files while still 221 taking advantage of the benefits they provide.</p> 222 223 <p>To isolate the damage a wayward SSI file can cause, a server 224 administrator can enable <a href="/suexec.html">suexec</a> as 225 described in the <a href="#cgi">CGI in General</a> section.</p> 226 227 <p>Enabling SSI for files with <code>.html</code> or <code>.htm</code> 228 extensions can be dangerous. This is especially true in a shared, or high 229 traffic, server environment. SSI-enabled files should have a separate 230 extension, such as the conventional <code>.shtml</code>. This helps keep 231 server load at a minimum and allows for easier management of risk.</p> 232 233 <p>Another solution is to disable the ability to run scripts and 234 programs from SSI pages. To do this replace <code>Includes</code> 235 with <code>IncludesNOEXEC</code> in the <code class="directive"><a href="/mod/core.html#options">Options</a></code> directive. Note that users may 236 still use <code><--#include virtual="..." --></code> to execute CGI 237 scripts if these scripts are in directories designated by a <code class="directive"><a href="/mod/mod_alias.html#scriptalias">ScriptAlias</a></code> directive.</p> 238 239 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 240<div class="section"> 241<h2><a name="cgi" id="cgi">CGI in General</a></h2> 242 243 244 245 <p>First of all, you always have to remember that you must trust the 246 writers of the CGI scripts/programs or your ability to spot potential 247 security holes in CGI, whether they were deliberate or accidental. CGI 248 scripts can run essentially arbitrary commands on your system with the 249 permissions of the web server user and can therefore be extremely 250 dangerous if they are not carefully checked.</p> 251 252 <p>All the CGI scripts will run as the same user, so they have potential 253 to conflict (accidentally or deliberately) with other scripts e.g. User 254 A hates User B, so he writes a script to trash User B's CGI database. One 255 program which can be used to allow scripts to run as different users is 256 <a href="/suexec.html">suEXEC</a> which is included with Apache as of 257 1.2 and is called from special hooks in the Apache server code. Another 258 popular way of doing this is with 259 <a href="http://cgiwrap.sourceforge.net/">CGIWrap</a>.</p> 260 261 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 262<div class="section"> 263<h2><a name="nsaliasedcgi" id="nsaliasedcgi">Non Script Aliased CGI</a></h2> 264 265 266 267 <p>Allowing users to execute CGI scripts in any directory should only be 268 considered if:</p> 269 270 <ul> 271 <li>You trust your users not to write scripts which will deliberately 272 or accidentally expose your system to an attack.</li> 273 <li>You consider security at your site to be so feeble in other areas, 274 as to make one more potential hole irrelevant.</li> 275 <li>You have no users, and nobody ever visits your server.</li> 276 </ul> 277 278 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 279<div class="section"> 280<h2><a name="saliasedcgi" id="saliasedcgi">Script Aliased CGI</a></h2> 281 282 283 284 <p>Limiting CGI to special directories gives the admin control over what 285 goes into those directories. This is inevitably more secure than non 286 script aliased CGI, but only if users with write access to the 287 directories are trusted or the admin is willing to test each 288 new CGI script/program for potential security holes.</p> 289 290 <p>Most sites choose this option over the non script aliased CGI 291 approach.</p> 292 293 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 294<div class="section"> 295<h2><a name="dynamic" id="dynamic">Other sources of dynamic content</a></h2> 296 297 298 299 <p>Embedded scripting options which run as part of the server itself, 300 such as <code>mod_php</code>, <code>mod_perl</code>, <code>mod_tcl</code>, 301 and <code>mod_python</code>, run under the identity of the server itself 302 (see the <code class="directive"><a href="/mod/mod_unixd.html#user">User</a></code> directive), and 303 therefore scripts executed by these engines potentially can access anything 304 the server user can. Some scripting engines may provide restrictions, but 305 it is better to be safe and assume not.</p> 306 307 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 308<div class="section"> 309<h2><a name="dynamicsec" id="dynamicsec">Dynamic content security</a></h2> 310 311 312 313 <p>When setting up dynamic content, such as <code>mod_php</code>, 314 <code>mod_perl</code> or <code>mod_python</code>, many security considerations 315 get out of the scope of <code>httpd</code> itself, and you need to consult 316 documentation from those modules. For example, PHP lets you setup <a href="http://www.php.net/manual/en/ini.sect.safe-mode.php">Safe Mode</a>, 317 which is most usually disabled by default. Another example is <a href="http://www.hardened-php.net/suhosin/">Suhosin</a>, a PHP addon for more 318 security. For more information about those, consult each project 319 documentation.</p> 320 321 <p>At the Apache level, a module named <a href="http://modsecurity.org/">mod_security</a> 322 can be seen as a HTTP firewall and, provided you configure it finely enough, 323 can help you enhance your dynamic content security.</p> 324 325 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 326<div class="section"> 327<h2><a name="systemsettings" id="systemsettings">Protecting System Settings</a></h2> 328 329 330 331 <p>To run a really tight ship, you'll want to stop users from setting 332 up <code>.htaccess</code> files which can override security features 333 you've configured. Here's one way to do it.</p> 334 335 <p>In the server configuration file, put</p> 336 337 <pre class="prettyprint lang-config"><Directory /> 338 AllowOverride None 339</Directory></pre> 340 341 342 <p>This prevents the use of <code>.htaccess</code> files in all 343 directories apart from those specifically enabled.</p> 344 345 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 346<div class="section"> 347<h2><a name="protectserverfiles" id="protectserverfiles">Protect Server Files by Default</a></h2> 348 349 350 351 <p>One aspect of Apache which is occasionally misunderstood is the 352 feature of default access. That is, unless you take steps to change it, 353 if the server can find its way to a file through normal URL mapping 354 rules, it can serve it to clients.</p> 355 356 <p>For instance, consider the following example:</p> 357 358 <div class="example"><p><code> 359 # cd /; ln -s / public_html <br /> 360 Accessing <code>http://localhost/~root/</code> 361 </code></p></div> 362 363 <p>This would allow clients to walk through the entire filesystem. To 364 work around this, add the following block to your server's 365 configuration:</p> 366 367 <pre class="prettyprint lang-config"><Directory /> 368 Require all denied 369</Directory></pre> 370 371 372 <p>This will forbid default access to filesystem locations. Add 373 appropriate <code class="directive"><a href="/mod/core.html#directory">Directory</a></code> blocks to 374 allow access only in those areas you wish. For example,</p> 375 376 <pre class="prettyprint lang-config"><Directory /usr/users/*/public_html> 377 Require all granted 378</Directory> 379<Directory /usr/local/httpd> 380 Require all granted 381</Directory></pre> 382 383 384 <p>Pay particular attention to the interactions of <code class="directive"><a href="/mod/core.html#location">Location</a></code> and <code class="directive"><a href="/mod/core.html#directory">Directory</a></code> directives; for instance, even 385 if <code><Directory /></code> denies access, a <code> 386 <Location /></code> directive might overturn it.</p> 387 388 <p>Also be wary of playing games with the <code class="directive"><a href="/mod/mod_userdir.html#userdir">UserDir</a></code> directive; setting it to 389 something like <code>./</code> would have the same effect, for root, as 390 the first example above. We strongly 391 recommend that you include the following line in your server 392 configuration files:</p> 393 394 <pre class="prettyprint lang-config">UserDir disabled root</pre> 395 396 397 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 398<div class="section"> 399<h2><a name="watchyourlogs" id="watchyourlogs">Watching Your Logs</a></h2> 400 401 402 403 <p>To keep up-to-date with what is actually going on against your server 404 you have to check the <a href="/logs.html">Log Files</a>. Even though 405 the log files only reports what has already happened, they will give you 406 some understanding of what attacks is thrown against the server and 407 allow you to check if the necessary level of security is present.</p> 408 409 <p>A couple of examples:</p> 410 411 <div class="example"><p><code> 412 grep -c "/jsp/source.jsp?/jsp/ /jsp/source.jsp??" access_log <br /> 413 grep "client denied" error_log | tail -n 10 414 </code></p></div> 415 416 <p>The first example will list the number of attacks trying to exploit the 417 <a href="http://online.securityfocus.com/bid/4876/info/">Apache Tomcat 418 Source.JSP Malformed Request Information Disclosure Vulnerability</a>, 419 the second example will list the ten last denied clients, for example:</p> 420 421 <div class="example"><p><code> 422 [Thu Jul 11 17:18:39 2002] [error] [client foo.example.com] client denied 423 by server configuration: /usr/local/apache/htdocs/.htpasswd 424 </code></p></div> 425 426 <p>As you can see, the log files only report what already has happened, so 427 if the client had been able to access the <code>.htpasswd</code> file you 428 would have seen something similar to:</p> 429 430 <div class="example"><p><code> 431 foo.example.com - - [12/Jul/2002:01:59:13 +0200] "GET /.htpasswd HTTP/1.1" 432 </code></p></div> 433 434 <p>in your <a href="/logs.html#accesslog">Access Log</a>. This means 435 you probably commented out the following in your server configuration 436 file:</p> 437 438 <pre class="prettyprint lang-config"><Files ".ht*"> 439 Require all denied 440</Files></pre> 441 442 443 </div><div class="top"><a href="#page-header"><img alt="top" src="/images/up.gif" /></a></div> 444<div class="section"> 445<h2><a name="merging" id="merging">Merging of configuration sections</a></h2> 446 447 448 449 <p> The merging of configuration sections is complicated and sometimes 450 directive specific. Always test your changes when creating dependencies 451 on how directives are merged.</p> 452 453 <p> For modules that don't implement any merging logic, such as 454 <code class="directive">mod_access_compat</code>, the behavior in later sections 455 depends on whether the later section has any directives 456 from the module. The configuration is inherited until a change is made, 457 at which point the configuration is <em>replaced</em> and not merged.</p> 458 </div></div> 459<div class="bottomlang"> 460<p><span>Available Languages: </span><a href="/en/misc/security_tips.html" title="English"> en </a> | 461<a href="/fr/misc/security_tips.html" hreflang="fr" rel="alternate" title="Fran�ais"> fr </a> | 462<a href="/ko/misc/security_tips.html" hreflang="ko" rel="alternate" title="Korean"> ko </a> | 463<a href="/tr/misc/security_tips.html" hreflang="tr" rel="alternate" title="T�rk�e"> tr </a></p> 464</div><div class="top"><a href="#page-header"><img src="/images/up.gif" alt="top" /></a></div><div class="section"><h2><a id="comments_section" name="comments_section">Comments</a></h2><div class="warning"><strong>Notice:</strong><br />This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our <a href="http://httpd.apache.org/lists.html">mailing lists</a>.</div> 465<script type="text/javascript"><!--//--><![CDATA[//><!-- 466var comments_shortname = 'httpd'; 467var comments_identifier = 'http://httpd.apache.org/docs/2.4/misc/security_tips.html'; 468(function(w, d) { 469 if (w.location.hostname.toLowerCase() == "httpd.apache.org") { 470 d.write('<div id="comments_thread"><\/div>'); 471 var s = d.createElement('script'); 472 s.type = 'text/javascript'; 473 s.async = true; 474 s.src = 'https://comments.apache.org/show_comments.lua?site=' + comments_shortname + '&page=' + comments_identifier; 475 (d.getElementsByTagName('head')[0] || d.getElementsByTagName('body')[0]).appendChild(s); 476 } 477 else { 478 d.write('<div id="comments_thread">Comments are disabled for this page at the moment.<\/div>'); 479 } 480})(window, document); 481//--><!]]></script></div><div id="footer"> 482<p class="apache">Copyright 2014 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> 483<p class="menu"><a href="/mod/">Modules</a> | <a href="/mod/directives.html">Directives</a> | <a href="http://wiki.apache.org/httpd/FAQ">FAQ</a> | <a href="/glossary.html">Glossary</a> | <a href="/sitemap.html">Sitemap</a></p></div><script type="text/javascript"><!--//--><![CDATA[//><!-- 484if (typeof(prettyPrint) !== 'undefined') { 485 prettyPrint(); 486} 487//--><!]]></script> 488</body></html>