home       inleiding       sysadmin       services       links       bash       werk       nothing      

apache2 virtual name-hosts in CentOS 7

 

  1. snapshot
     
    Maak een clone van een CentOS7 en zet je netwerk bridged.
    Zorg ook voor een virtuale Mint18, eveneens net-bridged.
      
  2. 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
    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"

    $ cat/etc/resolv.conf

    # Generated by NetworkManager
    search syntraab.mechelen
    nameserver 10.28.100.10
    nameserver 10.28.100.20

     

  3. apache2
     
    Installeer apache2 op CentOS:
    $ 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
     
    Configureer SElinux voor vrije directory toegang:
    $ sudo setsebool -P httpd_unified 1
     
    Test default website:
    $ lynx localhost
    Apache HTTP Server Test Page powered by CentOS (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 CentOS.
    Just visiting?

     

  4. 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 

     

  5. 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.

  6. 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.
     

  7. 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>

     

  8. 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.
     

  9. 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 ....