2017-10-26 21:20:01 +00:00
|
|
|
|
= Apache HTTP Server
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
2017-10-27 20:44:00 +00:00
|
|
|
|
[IMPORTANT]
|
2017-10-26 21:20:01 +00:00
|
|
|
|
======
|
|
|
|
|
|
|
|
|
|
This page was automatically converted from https://fedoraproject.org/wiki/Apache_HTTP_Server
|
|
|
|
|
|
|
|
|
|
It is probably
|
|
|
|
|
|
|
|
|
|
* Badly formatted
|
2017-11-06 17:34:22 +00:00
|
|
|
|
* Missing graphics and tables that do not convert well from mediawiki
|
2017-10-26 21:20:01 +00:00
|
|
|
|
* Out-of-date
|
|
|
|
|
* In need of other love
|
|
|
|
|
|
|
|
|
|
Please fix it, remove this notice, and then add to `_topic_map.yml`
|
|
|
|
|
|
2017-11-10 15:16:19 +00:00
|
|
|
|
Pull requests accepted at https://pagure.io/fedora-docs/quick-docs
|
2017-10-26 21:20:01 +00:00
|
|
|
|
|
|
|
|
|
Once that is live, go to the original wiki page and add an `{{old}}`
|
|
|
|
|
tag, followed by a note like
|
|
|
|
|
|
|
|
|
|
....
|
|
|
|
|
{{admon/note|This page has a new home!|
|
|
|
|
|
This wiki page is no longer maintained. Please find the up-to-date
|
|
|
|
|
version at: https://docs.fedoraproject.org/whatever-the-url
|
|
|
|
|
}}
|
|
|
|
|
....
|
|
|
|
|
|
|
|
|
|
======
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The Apache HTTP Server is one of the most commonly-used web servers.
|
|
|
|
|
This page acts as a quick start guide to deploying and configuring
|
|
|
|
|
Apache on Fedora. For (many) more details, please see
|
|
|
|
|
https://httpd.apache.org/docs/current/[upstream's extensive
|
|
|
|
|
documentation].
|
|
|
|
|
|
|
|
|
|
[[installation]]
|
|
|
|
|
Installation
|
|
|
|
|
~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
`$ su` +
|
|
|
|
|
`# dnf install httpd`
|
|
|
|
|
|
|
|
|
|
To have the server start at each boot:
|
|
|
|
|
|
|
|
|
|
`# systemctl enable httpd.service`
|
|
|
|
|
|
|
|
|
|
To start the server now:
|
|
|
|
|
|
|
|
|
|
`# systemctl start httpd.service`
|
|
|
|
|
|
|
|
|
|
At this point, you should be able to browse to http://localhost on the
|
|
|
|
|
server and access the Apache test page. You will most likely not be able
|
|
|
|
|
to access the server from any other host, yet: we will change this
|
|
|
|
|
link:#firewall-configuration[later].
|
|
|
|
|
|
|
|
|
|
[[tlsssl-support]]
|
|
|
|
|
TLS/SSL support
|
|
|
|
|
~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
If you want TLS/SSL support, you can also install , which is based on
|
|
|
|
|
https://www.openssl.org[OpenSSL]. Alternatives are (uses
|
|
|
|
|
https://www.gnutls.org/[GnuTLS]) and (uses
|
|
|
|
|
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS[NSS]).
|
|
|
|
|
|
|
|
|
|
[[using-mod_ssl]]
|
|
|
|
|
Using mod_ssl
|
|
|
|
|
^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
Install mod_ssl package and it will be automatically enabled
|
|
|
|
|
|
|
|
|
|
`# dnf install mod_ssl`
|
|
|
|
|
|
|
|
|
|
[[install-an-existing-certificate]]
|
|
|
|
|
Install an existing certificate
|
|
|
|
|
+++++++++++++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
If you already have a certificate generated on another computer, move
|
|
|
|
|
the certificate and the key file to the correct folder, and ensure their
|
|
|
|
|
SELinux contexts, ownership, and permissions are correct:
|
|
|
|
|
|
|
|
|
|
`# mv key_file.key /etc/pki/tls/private/myhost.com.key` +
|
|
|
|
|
`# restorecon /etc/pki/tls/private/myhost.com.key` +
|
|
|
|
|
`# chown root.root /etc/pki/tls/private/myhost.com.key` +
|
|
|
|
|
`# chmod 0600 /etc/pki/tls/private/myhost.com.key` +
|
|
|
|
|
`#` +
|
|
|
|
|
`# mv certificate.crt /etc/pki/tls/certs/myhost.com.crt` +
|
|
|
|
|
`# restorecon /etc/pki/tls/certs/myhost.com.crt` +
|
|
|
|
|
`# chown root.root /etc/pki/tls/certs/myhost.com.crt` +
|
|
|
|
|
`# chmod 0600 /etc/pki/tls/certs/myhost.com.crt`
|
|
|
|
|
|
|
|
|
|
After this link:#mod_ssl-configuration[ set it up]
|
|
|
|
|
|
|
|
|
|
[[generate-a-new-certificate]]
|
|
|
|
|
Generate a new certificate
|
|
|
|
|
++++++++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
How to https://fedoraproject.org/wiki/Https#openssl[generate a new
|
|
|
|
|
certificate]
|
|
|
|
|
|
|
|
|
|
[[mod_ssl-configuration]]
|
|
|
|
|
mod_ssl configuration
|
|
|
|
|
+++++++++++++++++++++
|
|
|
|
|
|
|
|
|
|
The default TLS/SSL configuration is contained in the file (if you are
|
|
|
|
|
using ). If you examine that file, you will see the directives that
|
|
|
|
|
specify where the TLS/SSL certificate and key are located:
|
|
|
|
|
|
|
|
|
|
`SSLCertificateFile /etc/pki/tls/certs/localhost.crt` +
|
|
|
|
|
`SSLCertificateKeyFile /etc/pki/tls/private/localhost.key`
|
|
|
|
|
|
|
|
|
|
If you look carefully, you will see that these directives are actually
|
|
|
|
|
enclosed in a block defining a
|
|
|
|
|
https://httpd.apache.org/docs/current/vhosts/[virtual host]:
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
`...` +
|
|
|
|
|
`SSLCertificateFile /etc/pki/tls/certs/localhost.crt` +
|
|
|
|
|
`...` +
|
|
|
|
|
`SSLCertificateKeyFile /etc/pki/tls/private/localhost.key` +
|
|
|
|
|
`...` +
|
|
|
|
|
|
|
|
|
|
If we wanted to define a different location for these files, we could
|
|
|
|
|
edit the lines in directly, but it would be better to create a new file
|
|
|
|
|
:
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
`SSLCertificateFile /etc/pki/tls/certs/www.myhost.org.crt` +
|
|
|
|
|
`SSLCertificateKeyFile /etc/pki/tls/private/www.myhost.org.key` +
|
|
|
|
|
|
|
|
|
|
This file will override those two settings for the _default_:443 virtual
|
|
|
|
|
host; all other settings from will be kept.
|
|
|
|
|
|
|
|
|
|
[[settings-for-individual-virtual-hosts]]
|
|
|
|
|
Settings for individual virtual hosts
|
|
|
|
|
|
|
|
|
|
If you want a specific virtual host to use SSL/TLS with a different
|
|
|
|
|
certificate from the default, open that virtual host's configuration
|
|
|
|
|
file, usually , and insert these lines between and :
|
|
|
|
|
|
|
|
|
|
`SSLEngine on` +
|
|
|
|
|
`SSLCertificateFile /etc/pki/tls/certs/hostname.crt` +
|
|
|
|
|
`SSLCertificateKeyFile /etc/pki/tls/private/hostname.key`
|
|
|
|
|
|
|
|
|
|
[[installing-webapps]]
|
|
|
|
|
Installing webapps
|
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
You probably want to run something on your web server. Many of the most
|
|
|
|
|
popular 'web applications' are packaged for Fedora. Using the packaged
|
|
|
|
|
versions of web applications is usually recommended: they will be
|
|
|
|
|
configured following the distribution's best practices which help to
|
|
|
|
|
ensure the security of the installation, for instance by installing
|
|
|
|
|
static files to locations the web server does not have the ability to
|
|
|
|
|
write to, and doing access control with configuration files rather than
|
|
|
|
|
files, which are slightly more vulnerable to attack.
|
|
|
|
|
|
|
|
|
|
Packaged web applications will also be configured to work with SELinux,
|
|
|
|
|
which provides significant security benefits.
|
|
|
|
|
|
|
|
|
|
You will also receive updates through the usual Fedora update process,
|
|
|
|
|
making it easier to keep your installation up to date.
|
|
|
|
|
|
|
|
|
|
They will also often have the default configuration tweaked according to
|
|
|
|
|
Fedora's conventions, meaning you have to do less work to get the
|
|
|
|
|
application up and running.
|
|
|
|
|
|
|
|
|
|
Most web applications are simply packaged according to their name. For
|
|
|
|
|
example, you can install Wordpress with:
|
|
|
|
|
|
|
|
|
|
`# dnf install wordpress`
|
|
|
|
|
|
|
|
|
|
Packaged web applications will usually provide Fedora-specific
|
|
|
|
|
instructions in a documentation file - for instance, Wordpress provides
|
|
|
|
|
the files and . It is always a good idea to read these files!
|
|
|
|
|
|
|
|
|
|
Packaged web applications usually restrict access by default so you can
|
|
|
|
|
access them only from the server host itself, to ensure you can run all
|
|
|
|
|
initial configuration safely and things like administration interfaces
|
|
|
|
|
are not left accessible to the public. For information on how to broaden
|
|
|
|
|
access, see link:#webapp-access-control[below].
|
|
|
|
|
|
|
|
|
|
Web applications commonly require the use of a database server. This
|
|
|
|
|
wiki contains information on installing and configuring PostgreSQL and
|
|
|
|
|
MariaDB on Fedora.
|
|
|
|
|
|
|
|
|
|
[[configuration]]
|
|
|
|
|
Configuration
|
|
|
|
|
~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
is the main Apache configuration file. It _includes_ : if the same
|
|
|
|
|
setting is specified in both and a file in , the setting from the file
|
|
|
|
|
will win. Files in are read in alphabetical order: a setting from will
|
|
|
|
|
win over a setting from , which will win over a setting from , which
|
|
|
|
|
will win over a setting from .
|
|
|
|
|
|
|
|
|
|
It is usually best practice never to modify or any of the files shipped
|
|
|
|
|
by Fedora packages directly. If you make any local changes to these
|
|
|
|
|
files, then any changes to them in newer package versions will not be
|
|
|
|
|
directly applied: instead a file will be created and you will have to
|
|
|
|
|
merge the changes manually. It is usually better instead to create a new
|
|
|
|
|
file in which will take precedence over the file you wish to 'modify',
|
|
|
|
|
and make your settings there. For instance, to change a setting
|
|
|
|
|
specified in you could create the file and place your setting in that
|
|
|
|
|
file. We will see an example of this next.
|
|
|
|
|
|
|
|
|
|
After making any changes to your server configuration, you should run:
|
|
|
|
|
|
|
|
|
|
`# apachectl reload`
|
|
|
|
|
|
|
|
|
|
to apply the changes. Certain changes may require Apache to be fully
|
|
|
|
|
restarted:
|
|
|
|
|
|
|
|
|
|
`# systemctl restart httpd.service`
|
|
|
|
|
|
|
|
|
|
[[enabling-access-to-web-applications]]
|
|
|
|
|
Enabling access to web applications
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
Fedora-packaged web applications are usually configured such that, by
|
|
|
|
|
default, access is allowed only from localhost. Typically you will find
|
|
|
|
|
that there is a file with the following (among other settings):
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.4` +
|
|
|
|
|
` Require local` +
|
|
|
|
|
` ` +
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.2` +
|
|
|
|
|
` Order Deny,Allow` +
|
|
|
|
|
` Deny from all` +
|
|
|
|
|
` Allow from 127.0.0.1` +
|
|
|
|
|
` Allow from ::1` +
|
|
|
|
|
` ` +
|
|
|
|
|
|
|
|
|
|
Before allowing general access to the webapp, ensure you have configured
|
|
|
|
|
it correctly and the administration interface and other sensitive areas
|
|
|
|
|
are not accessible without appropriate authentication. Also remember to
|
|
|
|
|
ensure your database configuration is secure, if the application uses a
|
|
|
|
|
database. To broaden access to the application, you can create a file .
|
|
|
|
|
To allow access to all systems on a typical local network, you could
|
|
|
|
|
write:
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.4` +
|
|
|
|
|
` Require local` +
|
|
|
|
|
` Require ip 192.168.1` +
|
|
|
|
|
` ` +
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.2` +
|
|
|
|
|
` Order Deny,Allow` +
|
|
|
|
|
` Deny from all` +
|
|
|
|
|
` Allow from 127.0.0.1` +
|
|
|
|
|
` Allow from ::1` +
|
|
|
|
|
` Allow from 192.168.1` +
|
|
|
|
|
` ` +
|
|
|
|
|
|
|
|
|
|
Once you are sure the application is correctly configured, this
|
|
|
|
|
configuration will allow access from any host:
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.4` +
|
|
|
|
|
` Require all granted` +
|
|
|
|
|
` ` +
|
|
|
|
|
` ` +
|
|
|
|
|
` # Apache 2.2` +
|
|
|
|
|
` Order Deny,Allow` +
|
|
|
|
|
` Allow from all` +
|
|
|
|
|
` ` +
|
|
|
|
|
|
|
|
|
|
[[opening-firewall-ports]]
|
|
|
|
|
Opening firewall ports
|
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
Apache uses port 80 for plain http connections and port 443 for TLS/SSL
|
|
|
|
|
connections by default. To make this service available from other
|
|
|
|
|
computers or the Internet your have to allow Apache through the firewall
|
|
|
|
|
like this:
|
|
|
|
|
|
|
|
|
|
To open the firewall at each boot:
|
|
|
|
|
|
|
|
|
|
For plain HTTP connections:
|
|
|
|
|
|
|
|
|
|
`# firewall-cmd --permanent --add-service=http`
|
|
|
|
|
|
|
|
|
|
For TLS/SSL connections:
|
|
|
|
|
|
|
|
|
|
`# firewall-cmd --permanent --add-service=https`
|
|
|
|
|
|
|
|
|
|
To open the firewall right now:
|
|
|
|
|
|
|
|
|
|
For plain HTTP connections:
|
|
|
|
|
|
|
|
|
|
`# firewall-cmd --add-service=http`
|
|
|
|
|
|
|
|
|
|
For TLS/SSL connections:
|
|
|
|
|
|
|
|
|
|
`# firewall-cmd --add-service=https`
|
|
|
|
|
|
|
|
|
|
Remember that if your server is running behind a NAT router, you will
|
|
|
|
|
also need to configure your router to forward the HTTP and HTTPS ports
|
|
|
|
|
to your server if you wish to allow access from outside your local
|
|
|
|
|
network.
|
|
|
|
|
|
|
|
|
|
[[disable-test-page]]
|
|
|
|
|
Disable test page
|
|
|
|
|
^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
|
|
To disable the test page comment out all the lines in the file
|
|
|
|
|
|
|
|
|
|
[[references]]
|
|
|
|
|
References
|
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
|
|
* https://httpd.apache.org/docs/current/[Apache documentation]
|
|
|
|
|
* https://httpd.apache.org/docs/current/getting-started.html[Apache
|
|
|
|
|
"Getting Started"]
|
|
|
|
|
* https://httpd.apache.org/docs/current/ssl/[Apache TLS/SSL
|
|
|
|
|
documentation]
|
|
|
|
|
* https://httpd.apache.org/docs/current/misc/security_tips.html[Apache
|
|
|
|
|
security tips]
|
|
|
|
|
* OwnCloud
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
See a typo, something missing or out of date, or anything else which can be
|
2017-11-10 15:16:19 +00:00
|
|
|
|
improved? Edit this document at https://pagure.io/fedora-docs/quick-docs.
|