Apache
Original author(s) | Robert McCool |
---|---|
Developer(s) | Apache Software Foundation |
Initial release | 1995 |
Repository | Apache HTTP Server Repository |
Written in | C, XML |
Operating system | Unix-like, Microsoft Windows |
Type | Web server |
License | Apache License 2.0 |
Apache ("Apache HTTP Server", or httpd) is a tried and true modular free open source web server with powerful features. It is mostly used to serve PHP scripts, static pages and images. Many widely used content management systems like WordPress and MediaWiki can be served using the Apache web server. Apache powered about half the websites on the Internet Q3 2020.
Apache does not have the ability to run server-side JavaScript the way node.js does.
Apache is a modular web server and there are a lot of modules available. It can have a very small memory footprint if a minimal amount of modules are loaded and it can have a lot of features and a higher memory footprint if a huge variety of modules are loaded.
Tips[edit]
You can get free HTTPS certificates for Apache from Let's Encrypt. Using https with a valid certificate is almost a requirement for hosting any even remotely popular website.
Apache is best restarted by running:
apachectl configtest
apachectl graceful
You can restart Apache by running apachectl restart
or systemd by running service httpd restart
- but that will immediately close all the webservers connections and potentially cause failed page loads for those visiting sites running on the webservers. apachectl graceful
will keep current connections open. Restarting this way takes longer but it is also safer.
Configuration[edit]
Modern Apache version support three different worker modules:
The event MPM works really well with both php-fpm and php-zts.
PHP[edit]
Apache 2.4 supports opcache. It should be enabled in /etc/httpd/conf.d/php.conf
with:
php_value opcache.file_cache "/var/lib/php/opcache"
Make sure the user apache is running as can read and write to the directory you choose. The performance difference between a opcahce (compiled PHP cache) and no cache really is quite huge.
Modern PHP modules for Apache support APCu memory cache. You should absolutely enable this if the web application you use supports because it really is very efficient.
Mod Rewrite Tricks[edit]
You can turn *.php?
into */
with:
RewriteRule ^([^/\.]+)/?$ $1.php [L]
Checking Apache's Status[edit]
You can check if systemd believes Apache is running on Debian and Ubuntu with:
sudo systemctl status apache2
The equivalent on AlmaLinux, Fedora, CentOS and RHEL is as to, as root
, run:
systemctl status httpd
Apache comes with a utility called apachectl
. Running apachectl status
will probably just redirect to systemctl status httpd
on modern distributions (it used to show output from apachectl
).
Another, a bit more complicated way, to check the status of a Apache server is to make it show a status page for you. This can be done by means of the mod_status
module. You would need this to a Apache configuration file (a main one, not a per-vost one) to load it:
LoadModule status_module modules/mod_status.so
That is not enough. You will also need a configuration file for it. That file can be /etc/apache2/mods-enabled/status.conf
(Debian/Ubuntu) or /etc/httpd/conf.d/server-status.conf
(AlmaLinux, RHEL, Fedora). The contents of it should be something like:
<IfModule mod_status.c>
<VirtualHost 127.0.0.1:80>
<Location /server-status>
SetHandler server-status
Require local #restricts access to localhost
</Location>
</VirtualHost>
</Ifmodule>
This assumes you do not have any other vhost on 127.0.0.1
.
You could, instead, just add:
<IfModule mod_status.c>
<Location /server-status>
SetHandler server-status
Require local #restricts access to localhost
</Location>
</Ifmodule>
..to any existing Apache configuration file.
You should check if your new configuration is valid with apachectl -t
before you make Apache load it with apachectl graceful
(or apachectl restart
if you don't care about concurrent users).
Common Problems[edit]
"(28)No space left on device: mod_rewrite: could not create rewrite_log_lock": This error can occur if Apache shuts down in a dirty (not normal) fashion. The cause of this error is semaphore-arrays left over after an unclean shutdown. You can check what, if anything, is left behind with ipcs -s | grep apache
and remove the semaphore-arrays by running:
ipcs -s | grep apache | perl -e 'while (<STDIN>) { @a=split(/\s+/); print `ipcrm sem $a[1]`}'
Links[edit]
Apache has a homepage at httpd.apache.org.
Enable comment auto-refresher