home       inleiding       sysadmin       services       links       bash       werk       nothing      

apache2 web-server (inleiding)

apache2 is een webserver
 
apache-webserver wordt ontwikkeld sinds 1995, voor het, toen nog, prille world wibe web. Dit onder het toen snel populair wordende besturingssysteem LINUX. De naam komt van - 'a patchy server' - een geheel van bij mekaar gegooide patches van NCSA webserver. Patsches om tot een stabiele daemon te komen. APACHE heeft ooit een marktaandeel gehad van 70% van alle webservers, maar moet de laatste jaren terrein prijsgeven aan NGINX, een eveneens onder linux draaiende webserver. (meer statistieken: https://news.netcraft.com)
 
apache webserver home page: https://httpd.apache.org/
apache wikipedia: https://en.wikipedia.org/wiki/Apache_HTTP_Server
apache wikipedia nederlands: apache wikipedia nederlands
 

  1. installatie van apache2 onder ubuntu-16.04
     
    Werk op een ubuntu server versie 16.04 (of hoger) met een bridged netwerk, vast ip-adres en een unieke hostname. Zorg dat ssh werkt. Denk ook aan een snapshot. Doe een apt-get update / apt-get upgrade
     
    user@ubu16-srv-01:~$ sudo apt-get install apache2
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following additional packages will be installed:
    apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
    Suggested packages:
    www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom
    openssl-blacklist

    wat wordt er geinstalleerd:

    The following NEW packages will be installed:
    apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
    libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
    0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
    Need to get 1.557 kB of archives.
    After this operation, 6.428 kB of additional disk space will be used.

    installatie proces ...

    Do you want to continue? [Y/n] y
    Get:1 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 libapr1 amd64 1.5.2-3 [86,0 kB]
    Get:2 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1 amd64 1.5.4-1build1 [77,1 kB]
    Get:3 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-dbd-sqlite3 amd64 1.5.4-1build1 [10,6 kB]
    Get:4 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 libaprutil1-ldap amd64 1.5.4-1build1 [8.720 B]
    Get:5 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 liblua5.1-0 amd64 5.1.5-8ubuntu1 [102 kB]
    Get:6 http://be.archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-bin amd64 2.4.18-2ubuntu3.2 [926 kB]
    Get:7 http://be.archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-utils amd64 2.4.18-2ubuntu3.2 [81,7 kB]
    Get:8 http://be.archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2-data all 2.4.18-2ubuntu3.2 [162 kB]
    Get:9 http://be.archive.ubuntu.com/ubuntu xenial-updates/main amd64 apache2 amd64 2.4.18-2ubuntu3.2 [86,7 kB]
    Get:10 http://be.archive.ubuntu.com/ubuntu xenial/main amd64 ssl-cert all 1.0.37 [16,9 kB]
    Fetched 1.557 kB in 0s (5.261 kB/s)
    Preconfiguring packages ...
    Selecting previously unselected package libapr1:amd64.
    (Reading database ... 91944 files and directories currently installed.)
    Preparing to unpack .../libapr1_1.5.2-3_amd64.deb ...
    Unpacking libapr1:amd64 (1.5.2-3) ...
    ...
    Processing triggers for libc-bin (2.23-0ubuntu7) ...
    ...
    Setting up libapr1:amd64 (1.5.2-3) ...
    Setting up libaprutil1:amd64 (1.5.4-1build1) ...
    Setting up libaprutil1-dbd-sqlite3:amd64 (1.5.4-1build1) ...
    Setting up libaprutil1-ldap:amd64 (1.5.4-1build1) ...
    Setting up liblua5.1-0:amd64 (5.1.5-8ubuntu1) ...
    Setting up apache2-bin (2.4.18-2ubuntu3.2) ...
    Setting up apache2-utils (2.4.18-2ubuntu3.2) ...
    Setting up apache2-data (2.4.18-2ubuntu3.2) ...
    Setting up apache2 (2.4.18-2ubuntu3.2) ...

    standaard modules:

    Enabling module mpm_event.
    Enabling module authz_core.
    Enabling module authz_host.
    Enabling module authn_core.
    Enabling module auth_basic.
    Enabling module access_compat.
    Enabling module authn_file.
    Enabling module authz_user.
    Enabling module alias.
    Enabling module dir.
    Enabling module autoindex.
    Enabling module env.
    Enabling module mime.
    Enabling module negotiation.
    Enabling module setenvif.
    Enabling module filter.
    Enabling module deflate.
    Enabling module status.
    Enabling conf charset.
    Enabling conf localized-error-pages.
    Enabling conf other-vhosts-access-log.
    Enabling conf security.
    Enabling conf serve-cgi-bin.

    standaard website:

    Enabling site 000-default.

    eindafwikkeling:

    Setting up ssl-cert (1.0.37) ...
    Processing triggers for libc-bin (2.23-0ubuntu7) ...
    Processing triggers for systemd (229-4ubuntu17) ...
    Processing triggers for ureadahead (0.100.0-19) ...
    Processing triggers for ufw (0.35-0ubuntu2) ...

     

  2. testen
     
    • installeer lynx op je server en tik daarna
       
      user@ubu16-srv-01:~$ lynx localhost
       
      je ziet dan het volgende:
      Ubuntu Logo Apache2 Ubuntu Default Page
      It works!
       
      This is the default welcome page used to test the correct operation of the
      Apache2 server after installation on Ubuntu systems. It is based on the
      equivalent page on Debian, from which the Ubuntu Apache packaging is
      derived. If you can read this page, it means that the Apache HTTP server
      installed at this site is working properly. You should replace this file
      (located at /var/www/html/index.html) before continuing to operate your HTTP
      server.
       
      If you are a normal user of this web site and don't know what this page is
      about, this probably means that the site is currently unavailable due to
      maintenance. If the problem persists, please contact the site's
      administrator.
      Configuration Overview
       
      Ubuntu's Apache2 default configuration is different from the upstream
      default configuration, and split into several files optimized for
      interaction with Ubuntu tools. The configuration system is fully documented
      in /usr/share/doc/apache2/README.Debian.gz. Refer to this for the full
      documentation. Documentation for the web server itself can be found by
      accessing the manual if the apache2-doc package was installed on this
      server.
       
      The configuration layout for an Apache2 web server installation on Ubuntu
      systems is as follows:
      /etc/apache2/
      -- press space for next page --
      Arrow keys: Up and Down to move.  Right to follow a link; Left to go back.
      H)elp O)ptions P)rint G)o M)ain screen Q)uit /=search [delete]=history list 
    • open een browser op je lap-/desktop en gebruik het statisch ip van je server als URL.
      als dit niet werkt, kijk je netwerkinstellingen dan na ...
       
  3. oefening
     
    Zoek zelf a.d.h.v. dpkg:
    • de index.html van de default website
    • de configuratiefiles
    • de versie van apache2
    • de apache binaries
    • daemon admin = service management (start/stop/reload ...)
       
  4. using 127.0.1.1 for ServerName
     
    Tijdens de opstartroutine verschijnt de volgende melding op scherm (je ziet die ook als je de status van apache2 opvraagt met systemctl):
     
    Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
     
    Die warning verdwijnt als je in het bestand
    /etc/apache2/sites-available/000-default.conf
    de directive ServerName gebruikt, in het volgende voorbeeld op de tweede regel:
    <VirtualHost *:80>
    ServerName localhost
    ...
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    ...
     
    </VirtualHost>

    /etc/apache2/sites-available/000-default.conf is de config-file van de default website.
     

  5. DocumentRoot
     
    Wat we natuurlijk graag zouden weten is waar de website te vinden is in het linux filesystem. Dat kun je instellen met de directive DocumentRoot. In het voorbeeld van punt 4, hierboven, zien we dat die default ingesteld staat op /var/www/html. Dat is niet voor alle linux distributies hetzelfde.
     
  6. configuratie
     
    Volgens de default webpage is de organisatie als volgt:
    # The Apache 2 web server configuration in Debian is quite different to
    # upstream's suggested way to configure the web server. This is because Debian's
    # default Apache2 installation attempts to make adding and removing modules,
    # virtual hosts, and extra configuration directives as flexible as possible, in
    # order to make automating the changes and administering the server as easy as
    # possible.
    ...
    # It is split into several files forming the configuration hierarchy outlined
    # below, all located in the /etc/apache2/ directory:
    #
    #   /etc/apache2/
    #   |-- apache2.conf
    #   |   `--  ports.conf
    #   |-- mods-enabled
    #   |   |-- *.load
    #   |   `-- *.conf
    #   |-- conf-enabled
    #   |   `-- *.conf
    #   `-- sites-enabled
    #       `-- *.conf

     
    Op de default website van apache2 onder ubuntu 16, vinden we een beknopte uitleg van hoe de configuratie in mekaar zit. In debian-based distro's (zoals ubuntu) werken we met een verspreide configuratie.
     

    • er is een config-directory: /etc/apache2
    • daarin zit de hoofd-configuratie-file: /etc/apache2/apache2.conf
    • vanuit apache2.conf worden include bestanden ingelezen:
       
    • modules
      # Include module configuration:
      IncludeOptional mods-enabled/*.load
      IncludeOptional mods-enabled/*.conf

      Modules moeten zo nodig geladen worden, en hebben een configuratie.
      In principe komen alle geïnstalleerde modules met hun load-/conf-files terecht in
      /etc/apache2/mods-available
       
      Maar, niet alle geïnstalleerde modules worden geladen, alleen de 'enabled' modules.
      Die vinden we terug in
      /etc/apache2/mods-enabled
       
      In mods-enabled vinden we symbolic links naar geselecteerde modules van mods-available.
       

    • ports
      # Include list of ports to listen on
      Include ports.conf

      De configuratie file van de TCP-poorten waarop http actief is
       

    • conf
      # Include generic snippets of statements
      IncludeOptional conf-enabled/*.conf

      Een directory waarin je 'stukken' configuratie kwijt kan
       

    • virtual hosts
      # Include the virtual host configurations:
      IncludeOptional sites-enabled/*.conf

      Apache2 werkt standaard met virtual hosts : een manier om verschillende websites met telkens een andere FQDN te draaien op dezelfde machine, met slechts één IP-adres.
       
      De directory sites-enabled bevat symbolic links naar de driectory sites-available. In sites-available vinden we files met telkens één configuratie van één virtual host. Er is er altijd minstens één: 000-default.conf
       
      Indien een beheerder een site tijdelijk uit de lucht wil halen, hoeft hij niet de configuratie te parkeren op een tijdelijke directory, maar kan hij gewoon de link naar die site verwijderen. Bij een heractivering moet alleen de link terug worden aangemaakt.
       

  7. versie
     
    user@ubu16-srv-01:~$ dpkg -l | grep apache2
    ii  apache2       2.4.18-2ubuntu3.2 Apache HTTP Server
    ii  apache2-bin   2.4.18-2ubuntu3.2 Apache HTTP Server (modules and other binary files)
    ii  apache2-data  2.4.18-2ubuntu3.2 Apache HTTP Server (common files)
    ii  apache2-utils 2.4.18-2ubuntu3.2 Apache HTTP Server (utility programs for web srvrs)

     
    user@ubu16-srv-01:~$ sudo /usr/sbin/apache2 -v

    Server version: Apache/2.4.18 (Ubuntu)
    Server built:   2017-05-05T16:32:00

     

  8. apache2 daemon admin (service mgmt)
     
    a) systemctl
     
    net zoals bij sshd kun je apache2 controlleren en beheren met systemctl.
    user@ubu16-srv-01:~$ sudo systemctl status apache2
    ● apache2.service - LSB: Apache2 web server
    Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
    Active: active (running) since di 2017-06-06 18:57:25 CEST; 3min 59s ago
     Docs: man:systemd-sysv-generator(8)
    Process: 1072 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCES
    Tasks: 55
    Memory: 4.5M
      CPU: 148ms
    CGroup: /system.slice/apache2.service
           ├─1165 /usr/sbin/apache2 -k start
           ├─1168 /usr/sbin/apache2 -k start
           └─1169 /usr/sbin/apache2 -k start
     
    jun 06 18:57:23 ubu16-srv-01 systemd[1]: Starting LSB: Apache2 web server...
    jun 06 18:57:23 ubu16-srv-01 apache2[1072]:  * Starting Apache httpd web server a
    jun 06 18:57:24 ubu16-srv-01 apache2[1072]: AH00558: apache2: Could not reliably 
    jun 06 18:57:25 ubu16-srv-01 apache2[1072]:  *
    jun 06 18:57:25 ubu16-srv-01 systemd[1]: Started LSB: Apache2 web server.

    user@ubu16-srv-01:~$ sudo systemctl stop apache2
    user@ubu16-srv-01:~$ sudo systemctl status apache2

    ● apache2.service - LSB: Apache2 web server
    Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
    Drop-In: /lib/systemd/system/apache2.service.d
           └─apache2-systemd.conf
    Active: inactive (dead) since di 2017-06-06 19:02:47 CEST; 1s ago
     Docs: man:systemd-sysv-generator(8)
    Process: 1311 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
    Process: 1072 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCES
     
    jun 06 19:02:46 ubu16-srv-01 systemd[1]: Stopping LSB: Apache2 web server...
    jun 06 19:02:46 ubu16-srv-01 apache2[1311]:  * Stopping Apache httpd web server a
    jun 06 19:02:47 ubu16-srv-01 apache2[1311]:  *
    jun 06 19:02:47 ubu16-srv-01 systemd[1]: Stopped LSB: Apache2 web server.

    Alle systemctl operaties (status, start, stop, restart, reload, enable, disable) werken op de gekende manier.
     
    b) sys-V
     
    Als we daarnet systemctl gebruikten, merkten we misschien het volgende op:
    ExecStop=/etc/init.d/apache2 stop
    Dit betekent dat het commando
    systemctl stop
    vertaald wordt naar
    /etc/init.d/apache2 stop
     
    Als we /etc/init.d/apache2 bekijken, blijkt dit een script te zijn:

    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          apache2
    # Required-Start:    $local_fs $remote_fs $network $syslog $named
    # Required-Stop:     $local_fs $remote_fs $network $syslog $named
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # X-Interactive:     true
    # Short-Description: Apache2 web server
    # Description:       Start the web server
    #  This script will start the apache2 web server.
    ### END INIT INFO
     
    DESC="Apache httpd web server"
    NAME=apache2
    DAEMON=/usr/sbin/$NAME
     
    SCRIPTNAME="${0##*/}"
    SCRIPTNAME="${SCRIPTNAME##[KS][0-9][0-9]}"
    if [ -n "$APACHE_CONFDIR" ] ; then
    ... (afgeknipt) ...

    Dit script kan worden uitgevoerd als sudo met de volgende opties:
     
    $ sudo /etc/init.d/apache2
    Usage: apache2 {start|stop|graceful-stop|restart|reload|force-reload}
     
    meer informatie over sys-v init op https://en.wikipedia.org/wiki/Init
     
    c) apache2ctl
     
    apache2 wordt altijd geinstalleerd met zijn eigen daemon adminscript: /usr/sbin/apache2ctl
    apache2ctl is een script vergelijkbaar met /etc/init.d/apache2 maar bevat meer mogelijkheden:
     
    $ /usr/sbin/apache2ctl
    Usage: /usr/sbin/apache2ctl start|stop|restart|graceful|graceful-stop|configtest|status|fullstatus|help
    /usr/sbin/apache2ctl <apache2 args>
    /usr/sbin/apache2ctl -h (for help on <apache2 args>)
     
    meer informatie: https://httpd.apache.org/docs/current/programs/apachectl.html