In dit artikel leggen wij de installatie en initiële configuratie van een Apache web server (met httpd-tools, mod_ssl en PHP-FPM) in CentOS 7 uit.
Apache vormt samen met MariaDB en PHP de zogeheten LAMP-Stack (Linux Apache MySQL PHP) en wordt gebruikt voor het hosten van dynamische websites. Host je een dynamische website op je VPS (e.g. WordPress), dan heb je ook MariaDB nodig (of een vergelijkbaar alternatief).
In dit artikel behandelen wij de volgende onderdelen:
- Apache installeren
- Apache poorten openen in je firewall
- PHP installeren
- Vhosts gebruiken
Daarnaast raden wij ook aan om een SFTP-server op te zetten, en de websites die je host te beveiligen met SSL.
- Voer de stappen in dit artikel uit als root user, of gebruik sudo.
- Wil je je Apache server meteen kunnen testen? Wijs dan voor je begint de DNS van een domein naar je VPS (i.e. via het root A- en AAAA-record).
Apache installeren
Stap 1
Verbind met je VPS via SSH of gebruik de VPS-console en update eerst je server:
yum -y update
Stap 2
Installeer Apache (en de benodigde extra packages) met het commando:
yum -y install httpd httpd-tools mod_ssl
Hiermee installeer je:
- httpd: De Apache-software zelf.
- httpd-tools: Administratieve- en beveiligingsscripts.
- mod_ssl: SSL v3 en TLS v1.x ondersteuning voor Apache.
Apache toestaan in je firewall
CentOS 7 komt standaard met Firewalld als firewall en out-of-the-box staan alle poorten daarin dicht. Je zet de http-(80) en https-(443) poorten open met de commando's:
firewall-cmd --zone=public --permanent --add-service=http firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --reload
Het laatste commando hierboven voert de wijziging live door. CentOS komt standaard met Selinux als aanvullende beveiliging. De http- en https-poorten staan hier standaard al in open en hoef je verder niets voor aan te passen.
Testen
Je kunt nu direct de werking van je web server testen door in een browser naar http://voorbeeld.nl te gaan, waarbij je voorbeeld.nl vervangt door je hostname (te controleren met het commando 'hostname'), of het IP-adres van je VPS. Je ziet dan de standaard test-pagina:
PHP installeren en updaten
Stap 1
Apache komt na de installatie zonder PHP. Wil je een dynamische PHP-website hosten (e.g. WordPress), dan heb je PHP nodig. Oude versies van PHP zijn onveilig. Voor de installatie van 7.3 gebruik je de stappen hieronder.
Installeer eerst de EPEL-release, Remi repository (waar PHP 7.3 in is opgenomen) en yum-utils:
yum -y install epel-release yum-utils
http://rpms.remirepo.net/enterprise/remi-release-7.rpm
Stap 2
Schakel de Remi-repository in met:
yum-config-manager --enable remi-php73
Stap 3
Installeer vervolgens PHP 7.3 met:
yum -y install php php-common php-mysql php-fpm yum-utils
- php-mysql voegt mysql-ondersteuning toe
- php-fpm is een PHP-FastCGI Process Manager die ten opzichte van reguliere FastCGI o.a. betere performance biedt bij beter bezochte websites.
Je PHP-versie is nu geïnstalleerd. Je controleert de preciese versie met:
php -v
Stap 4
Apache komt met een minimale configuratie waar niet automatisch er van uit wordt gegaan dat je een PHP website wil hosten. Het gevolg hiervan is dat bij bezoek van een website die PHP gebruikt (i.e. via index.php) de Apache placeholder getoond wordt in plaats van je website.
Het is dus belangrijk om hiervoor een kleine aanpassing in Apache te maken zodat Apache daadwerkelijk je website toont. Open hiervoor httpd.conf:
nano /etc/httpd/conf/httpd.conf
Stap 5
Zoek naar het stukje dat er uit ziet zoals hier onder:
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html </IfModule>
Pas het aan naar:
# # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html index.php </IfModule>
Sla de wijzigingen op en sluit Nano (ctrl + x > y > enter). Het maakt nu niet meer uit of een website index.html of index.php gebruikt.
Stap 6
Apache's configuratie gaat ook niet uit van extra opties zoals PHP-FPM. Er is dan ook een kleine aanpassing in de Apache-configuratie nodig om PHP-FPM te gebruiken.
Open het PHP-FPM configuratiebestand:
nano /etc/httpd/conf.d/php.conf
Stap 7
Scroll naar onderen naar de regel die begint met 'SetHandler' en pas die aan van:
SetHandler application/x-httpd-php
naar:
SetHandler "proxy:fcgi://127.0.0.1:9000"
Sla je wijzigingen op en sluit nano met ctrl + x > y > enter.
Stap 8
Apache en PHP-FPM staan na de installatie uitgeschakeld en starten ook niet automatisch na een herstart van CentOS. Je schakelt beide in en laat ze automatisch starten met de commando's:
systemctl enable httpd
systemctl enable php-fpm
systemctl start httpd
systemctl start php-fpm
Je Apache-server is nu helemaal klaar voor PHP. Vergeet niet MariaDB te installeren als er ook een database aan je website gekoppeld is en je VHost te configureren als je meerdere sites host.
Een VHost gebruiken
Wil je meer dan één domein hosten? Dan gebruik je een VHost-systeem (ook bekend als VirtualHost). Een VHost-file bevat o.a. de gegevens waar op je VPS specifieke domeinen gehost worden. Hierdoor worden bezoekers van domeinen die je op je VPS host automatisch naar de juiste mappen op je VPS gestuurd waar de websites zich bevinden (zonder dat die bezoekers daar iets van merken).
Stap 1
Maak de vhost file aan met het commando:
nano /etc/httpd/conf.d/vhost.conf
Stap 2
Neem de inhoud hieronder over, waarbij je example.com vervangt door de naam van het domein dat je wil hosten op je VPS.
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/html/example.com/ ErrorLog /var/log/httpd/example.com/error.log CustomLog /var/log/httpd/example.com/access.log combined </VirtualHost>
Voor ieder domein dat je extra wil toevoegen (ongeacht het aantal), voeg je het stukje vanaf <VirtualHost *:80> t/m </VirtualHost> opnieuw toe, waarbij je de domeinnaam vervangt door het daadwerkelijke andere domein. Voor example.com en voorbeeld.nl zou dit er als volgt uitzien:
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/html/example.com/ ErrorLog /var/log/httpd/example.com/error.log CustomLog /var/log/httpd/example.com/access.log combined </VirtualHost> <VirtualHost *:80> ServerAdmin admin@voorbeeld.nl ServerName voorbeeld.nl ServerAlias www.voorbeeld.nl DocumentRoot /var/www/html/voorbeeld.nl/ ErrorLog /var/log/httpd/voorbeeld.nl/error.log CustomLog /var/log/httpd/voorbeeld.nl/access.log combined </VirtualHost>
Stap 3
De directories die in de vorige stap staan bestaan nog niet en maak je samen met de log files eerst aan. Vervang hier example.com door de naam van het domein dat je toevoegt:
mkdir -p /var/www/html/example.com
mkdir -p /var/log/httpd/example.com
touch /var/log/httpd/example.com/error.log
touch /var/log/httpd/example.com/access.log
De toevoeging -p (-parent) maakt indien nodig alle mapstructuren aan die voor /example.com staan. In principe zouden deze allemaal al moeten bestaan.
Stap 4
Je kunt nu direct aan de slag met je website, door deze via SFTP of FTPS te uploaden, of door met een teksteditor vanuit command-line een html-website te maken (voor PHP, zie PHP installeren). Je kunt bijvoorbeeld als volgt een info.php pagina maken:
- Open php.info:
nano /var/www/html/example.com/info.php
- Voeg de volgende inhoud toe:
<?php phpinfo();
?>
Je Apache-server is nu klaar! Gebruikt je website een database? Neem dan ook een kijkje in onze MariaDB-handleiding. Voor het beveiligen van je website kun je onze Apache SSL-handleiding gebruiken.
Mocht je aan de hand van dit artikel nog vragen hebben, aarzel dan niet om onze supportafdeling te benaderen. Je kunt hen bereiken via de knop 'Neem contact op' onderaan deze pagina.