pavement

Apache, Configuring

From FreeBSDwiki
(Difference between revisions)
Jump to: navigation, search
(MPM)
m (Reverted edits by DavidYoung (talk) to last revision by 200.38.30.168)
 
(18 intermediate revisions by 8 users not shown)
Line 1: Line 1:
==Apache 2 Configuration==
+
The [[Apache]] webserver's main configuration file is the [[httpd.conf]] file, which, if you've installed apache via ports and left it at defaults, will be found in /usr/local/etc and basic management is done via [[apachectl]]. If you prefer a GUI method of configuring and managing apache, look to [[webmin]], but it is always advisable to know how to make the changes in the config file manually, since you may not be able to configure a specific setting or change via the [[webmin]] GUI.
 +
 
 +
==Testing your configuration==
 +
 +
When changing your config file, you may want to verify that the config file doesn't have any syntax problems:
 +
apachectl configtest
 +
 
 +
Note that your config can be free of syntax errors and still broken -- in the same way you can use words correctly but say the wrong thing, being free of syntax errors doesn't mean your config is free of all errors. :)
 +
 
 +
==Advanced Config and Optimization==
  
 
If you've got a busy webserver, you'll soon find yourself looking at tweaking the Apache configuration to get more. As it is, most Apache installs are configured for testing / development vs production use.
 
If you've got a busy webserver, you'll soon find yourself looking at tweaking the Apache configuration to get more. As it is, most Apache installs are configured for testing / development vs production use.
Line 5: Line 14:
 
==MPM==
 
==MPM==
  
By default, the httpd.conf has MPM specific settings for all possible MPM choices. However, since this choice is made at compile-time, all but one of these MPM specific can be safely removed. The default (and usually the recommended) MPM is prefork.
+
By default, the httpd.conf has MPM (multi-processing modules) specific settings for all possible MPM choices. However, since this choice is made at compile-time, all but one of these MPM specific can be safely removed. The default (and usually the recommended) MPM is prefork.
 +
 
 +
Look for this section in your default httpd.conf:
  
 
  ##
 
  ##
 
  ## Server-Pool Size Regulation (MPM specific)
 
  ## Server-Pool Size Regulation (MPM specific)
 
  ##
 
  ##
 +
 +
Read more about what an MPM is here: http://httpd.apache.org/docs/2.0/mpm.html.
  
 
===Prefork===
 
===Prefork===
Line 34: Line 47:
 
  MinSpareServers    10
 
  MinSpareServers    10
 
  MaxSpareServers    20
 
  MaxSpareServers    20
  MaxClients        250
+
  MaxClients        256
 
  MaxRequestsPerChild 15000
 
  MaxRequestsPerChild 15000
  
StartServers,
+
'''StartServers, MinSpareServers, MaxSpareServers''' 
Creating a child process can be one of the most expensive in terms of CPU usage. With a busy website you may start reaching the default MaxClients, in which case everyone else is locked out. This error will show up in your error logs.
+
Creating a child process can be one of the most expensive in terms of CPU usage. Experiment with raising these values... as a start, you can probably safely double them and go from there. During traffic spikes, the server will have more available, idle child processes already created, which should help reduce load and keep the server busier serving content than spawning new servers when needed.
 +
 
 +
'''MaxClients''' 
 +
With a busy website you may start reaching the default MaxClients, in which case everyone else is locked out. This error will show up in your error logs. Please note that there is a hard limit of 256 for this directive. Raising it requires setting a compile-time option and reinstalling. Still, 256 is much heftier than 150, so this may work out fine.
 +
 
 +
'''MaxRequestsPerChild''' 
 +
Leaving this at 0 means a child never dies... once its created it will serve an unlimited number of requests until the main daemon kills it off during traffic lulls. Setting this to a high number has the benefit of periodically refreshing the pool of child processes and keeping memory leakage to a minimum.
  
 
===Worker===
 
===Worker===
Line 59: Line 78:
 
Tweaked:
 
Tweaked:
 
  KeepAlives Off
 
  KeepAlives Off
 +
 +
==Include directive==
 +
'''Note:''' ''Do not confuse the '''''Include directive''''' with ''Option Includes'', or the ''INCLUDES filter''.
 +
 +
''httpd.conf'' is a large file, and it can be difficult to find things in it to maintain custom settings.  The '''Include directive''' is very useful for maintaining custom configurations in a modular way.  It allows inclusion of other configuration files, adding the directives contained in them to the server configuration.
 +
 +
For example, you may want to add virtual hosts, or temporarily grant browser-access to a directory, to others on your LAN, or similar custom configuration directives.  You can put directives for any context into a separate file and save the file as (for example) /usr/local/etc/{apacheversion}/includes/{custom_directive}.conf. This is especially useful for configuration options that change relatively frequently. Your custom configuration will be added to the server by adding the following line to ''httpd.conf'' (e.g. for apache2):
 +
 +
Include etc/apache2/includes/custom_directive.conf
 +
 +
Multiple Include lines are permitted. You can include everything in the directory by specifying the directory rather than a single file, but much more preferrably since Apache 2.0.41, you can use wildcards:
 +
 +
# Include etc/apache2/includes/        # everything in the directory will be included
 +
  Include etc/apache2/includes/*.conf  # wildcards recommended rather than the whole directory
 +
 +
The file path specified may be an absolute path or relative to the [http://httpd.apache.org/docs/trunk/mod/core.html#serverroot ServerRoot] directory (as above).
 +
 +
;Example: ('/usr/local/etc/apache2/includes/directories.conf')
 +
Alias /samples /usr/home/storage/_Samples
 +
<Directory "/usr/home/storage/_Samples">
 +
    Options Indexes
 +
    DirectoryIndex index.html index.php
 +
    AllowOverride None
 +
    Order allow,deny
 +
    Allow from all
 +
</Directory>
 +
 +
[[Category: Ports and Packages]]
 +
[[Category: Configuring FreeBSD]]

Latest revision as of 16:30, 25 August 2012

The Apache webserver's main configuration file is the httpd.conf file, which, if you've installed apache via ports and left it at defaults, will be found in /usr/local/etc and basic management is done via apachectl. If you prefer a GUI method of configuring and managing apache, look to webmin, but it is always advisable to know how to make the changes in the config file manually, since you may not be able to configure a specific setting or change via the webmin GUI.

Contents

[edit] Testing your configuration

When changing your config file, you may want to verify that the config file doesn't have any syntax problems:

apachectl configtest

Note that your config can be free of syntax errors and still broken -- in the same way you can use words correctly but say the wrong thing, being free of syntax errors doesn't mean your config is free of all errors. :)

[edit] Advanced Config and Optimization

If you've got a busy webserver, you'll soon find yourself looking at tweaking the Apache configuration to get more. As it is, most Apache installs are configured for testing / development vs production use.

[edit] MPM

By default, the httpd.conf has MPM (multi-processing modules) specific settings for all possible MPM choices. However, since this choice is made at compile-time, all but one of these MPM specific can be safely removed. The default (and usually the recommended) MPM is prefork.

Look for this section in your default httpd.conf:

##
## Server-Pool Size Regulation (MPM specific)
##

Read more about what an MPM is here: http://httpd.apache.org/docs/2.0/mpm.html.

[edit] Prefork

This is the default MPM and will work fine for most applications.

Default:

# prefork MPM
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule prefork.c>
StartServers         5
MinSpareServers      5
MaxSpareServers     10
MaxClients         150
MaxRequestsPerChild  0
</IfModule>

Tweaked:

StartServers        10
MinSpareServers     10
MaxSpareServers     20
MaxClients         256
MaxRequestsPerChild 15000

StartServers, MinSpareServers, MaxSpareServers Creating a child process can be one of the most expensive in terms of CPU usage. Experiment with raising these values... as a start, you can probably safely double them and go from there. During traffic spikes, the server will have more available, idle child processes already created, which should help reduce load and keep the server busier serving content than spawning new servers when needed.

MaxClients With a busy website you may start reaching the default MaxClients, in which case everyone else is locked out. This error will show up in your error logs. Please note that there is a hard limit of 256 for this directive. Raising it requires setting a compile-time option and reinstalling. Still, 256 is much heftier than 150, so this may work out fine.

MaxRequestsPerChild Leaving this at 0 means a child never dies... once its created it will serve an unlimited number of requests until the main daemon kills it off during traffic lulls. Setting this to a high number has the benefit of periodically refreshing the pool of child processes and keeping memory leakage to a minimum.

[edit] Worker

In order to try out the worker MPM, you must re-install Apache2 with different MAKE_ARGS. For the brave, please see this page: Apache2 with the Worker MPM.

[edit] KeepAlives

The KeepAlives directive is enabled by default; to quote from the Apache documentation:

The Keep-Alive extension to HTTP/1.0 and the persistent connection feature of 
HTTP/1.1 provide long-lived HTTP sessions which allow multiple requests to be 
sent over the same TCP connection. In some cases this has been shown to result
in an almost 50% speedup in latency times for HTML documents with many images. 

Which is a good thing, if you want fast pages and have a strong server to handle it. If you're more concerned with availability than speed, or are running Apache on a less-than-stellar machine, you may get better performance (cpu/processor-wise, at least,) by turning KeepAlives off:

Default:

KeepAlives On

Tweaked:

KeepAlives Off

[edit] Include directive

Note: Do not confuse the Include directive with Option Includes, or the INCLUDES filter.

httpd.conf is a large file, and it can be difficult to find things in it to maintain custom settings. The Include directive is very useful for maintaining custom configurations in a modular way. It allows inclusion of other configuration files, adding the directives contained in them to the server configuration.

For example, you may want to add virtual hosts, or temporarily grant browser-access to a directory, to others on your LAN, or similar custom configuration directives. You can put directives for any context into a separate file and save the file as (for example) /usr/local/etc/{apacheversion}/includes/{custom_directive}.conf. This is especially useful for configuration options that change relatively frequently. Your custom configuration will be added to the server by adding the following line to httpd.conf (e.g. for apache2):

Include etc/apache2/includes/custom_directive.conf

Multiple Include lines are permitted. You can include everything in the directory by specifying the directory rather than a single file, but much more preferrably since Apache 2.0.41, you can use wildcards:

# Include etc/apache2/includes/        # everything in the directory will be included
  Include etc/apache2/includes/*.conf  # wildcards recommended rather than the whole directory

The file path specified may be an absolute path or relative to the ServerRoot directory (as above).

Example
('/usr/local/etc/apache2/includes/directories.conf')
Alias /samples /usr/home/storage/_Samples
<Directory "/usr/home/storage/_Samples">
   Options Indexes
   DirectoryIndex index.html index.php
   AllowOverride None
   Order allow,deny
   Allow from all
</Directory>
Personal tools