apache2 virtual name-hosts in RH8
- snapshot
Maak een clone van een RH8 en zet je netwerk bridged.
Zorg ook voor een virtuale Mint20, eveneens net-bridged.
- netwerk
kijk je netwerksettings na,
geef de server een vast ip-address, gateway en dns-nameservers:
$ cat
/etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE="Ethernet" BOOTPROTO="none" IPADDR=10.28.101.14 NETMASK=255.255.255.0 GATEWAY=10.28.101.254 DNS1=8.8.8.8 DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="e0ecee8e-33ea-4c10-a0bf-f624e354165d" DEVICE="enp0s3" ONBOOT="yes" PEERDNS="yes" PEERROUTES="yes" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes" IPV6_PRIVACY="no"
- apache2
Installeer apache2 op RH8:
$ sudo yum install
httpd
Start de apache2 server:
$ sudo systemctl start
httpd
Enable de service bij opstarten:
$ sudo systemctl enable
httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service
Test default website:
$ lynx localhost
Apache HTTP Server Test Page powered by RH8 (p1 of 3) Testing 123.. This page is used to test the proper operation of the Apache HTTP server after it has been installed. If you can read this page it means that this site is working properly. This server is powered by RH8. Just visiting?
- domeinen in /etc/hosts
Echte domeinen worden toegevoegd aan DNS-servers. We zouden ook kunnen werken met een lokale DNS-test-server, maar deze is niet altijd beschikbaar. Daarom passen we de file/etc/hosts
aan om de virtuele domeinen te kunnen testen op onze server:
$ sudo vim
/etc/hosts
127.0.0.1 localhost localhost.localdomain syntra.com www.syntra.com ::1 localhost localhost.localdomain
- RH8 firewall
- Met het volgende commando kijken we naar de protocollen die toegelaten zijn in de zone public:
$ sudo firewall-cmd --zone public --list-all
- Met het volgende commando voegen we de service HTTP permanent toe aan de zone public:
$ sudo firewall-cmd --add-service http --zone public --permanent
- Met dit laatste commando voeren we de wijzigingen uit:
$ sudo firewall-cmd --reload
- Met het volgende commando kijken we naar de protocollen die toegelaten zijn in de zone public:
-
apache2 configuratie
In centOS is de apache2 configuratie nog een groot monolytisch blok.
We moeten toegang verlenen aan websites op een alternatieve plaats:
$ sudo vim
/etc/httpd/conf/httpd.conf
ergens in de buurt van regel 159, onder de toegangsdeclaratie van/var/www/html
moet je toegang verlenen aan/users-www
# # Controls who can get stuff from this server. # Require all granted </Directory> # toegevoegd om virtual hosts toe te laten vanaf /home <Directory /users-www> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> # # DirectoryIndex: sets the file that Apache will serve if a directory # is requested. # <IfModule dir_module> DirectoryIndex index.html </IfModule>
kijk even onderaan httpd.conf
# Supplemental configuration # # Load config files in the "/etc/httpd/conf.d" directory, if any. IncludeOptional conf.d/*.conf
we kunnen virtual host configuratie files toevoegen in deze directory, zolang ze maar een suffix
.conf
hebben. - users & webspace
we creeren een user syntra.com, toekomstige eigenaar van het domein syntra.com,
en we zetten een minimalistische default website in een subdirectory~/Public
.$ sudo mkdir /users-www $ sudo useradd -m syntra.com --home-dir /users-www/syntra.com $ sudo su syntra.com $ cd $ pwd /users-www/syntra.com $ mkdir Public $ echo syntra.com > Public/index.html $ cat Public/index.html syntra.com
Echte virtual hosts op een internet webserver worden benaderd via virtuele user-accounts. Die hebben dan ook geen home-directory. Ze bevinden zich meestal in een database.
- virtuele web-host
zet een virtual-host configuratie file in de directory/etc/httpd/conf.d
:
$ cd /etc/httpd/conf.d
$ sudo vim syntra.com.conf
<VirtualHost *:80> ServerName syntra.com ServerAlias www.syntra.com DocumentRoot /users-www/syntra.com/Public </VirtualHost>
- testen
herstart apache2:
$
sudo systemctl restart httpd
test de service:
$
sudo systemctl status httpd.service -l
● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2016-04-15 13:53:22 CEST; 1min 53s ago Docs: man:httpd(8) man:apachectl(8) Process: 11624 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=1/FAILURE) Main PID: 11642 (httpd) Status: "Total requests: 0; Current requests/sec: 0; Current traffic: 0 B/sec" CGroup: /system.slice/httpd.service ├─11642 /usr/sbin/httpd -DFOREGROUND ├─11643 /usr/sbin/httpd -DFOREGROUND ├─11644 /usr/sbin/httpd -DFOREGROUND ├─11645 /usr/sbin/httpd -DFOREGROUND ├─11646 /usr/sbin/httpd -DFOREGROUND └─11647 /usr/sbin/httpd -DFOREGROUND Apr 15 13:53:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... Apr 15 13:53:22 localhost.localdomain httpd[11642]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message Apr 15 13:53:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
test de website:
$
lynx syntra.com
Alert!: HTTP/1.1 -- 403 Forbidden
You don't have permission to access / on this server
Misschien staan de permissions fout:
$
sudo ls -l /users-www
drwx------. 3 syntra.com syntra.com 92 Apr 15 19:17 syntra.com
We corrigeren de permissions:
$
sudo chmod 755 /users-www/syntra.com
Helaas is dit niet voldoende ...
In de log files vinden we het volgende terug:sudo less /var/log/httpd/error_log [Fri Apr 15 19:36:18.697536 2016] [core:error] [pid 2555] (13)Permission denied: [client 127.0.0.1:51635] AH00035: access to /index.html denied
We vermoeden dat deze error te maken heeft met de SElinux veiligheidsmodule.
Om dit vermoeden te testen heffen we de veiligheid tijdelijk op met:
$ sudo setenforce 0
We kijken nu naar de website ...
$
lynx syntra.com
syntra.com
En die werkt.
Daarna schakelen we de veiligheid terug in met:
$ sudo setenforce 1
En de website werkt weer niet meer.
Om alles correct te laten werken moeten we de service httpd en de directory/users-www
met elkaar verbinden.
- SElinux configureren.
We moeten eerst policy utilities installeren:
$ sudo yum install policycoreutils-python
De volgende twee commando's geven correcte toegang van httpd aan/users-www
$ sudo semanage fcontext --add --type httpd_sys_content_t "/users-www(/.*)?" $ sudo restorecon -Rv /users-www
Als we nu testen (
setenforce
staat nog steeds op 1) werkt de website.
We kunnen nu eindelijk de twee andere virtuele web-sites configureren en testen ....