Konfiguration Apache2

Der Apache2 Server liegt in Ihrer Manager Node. Sie müssen SSH zu Ihrer Manager Node und die Datei 000-default.conf öffnen. Diese Datei ist die Standardkonfiguration für Apache. In der näschste Schritt werden Sie diese Datei anpassen, um die User an Single Course App zu leiten.

Wenn Ihnen SSH nicht bekannt ist, bitte lesen Sie diese Anleitung.

konfigurationsdatei ersetzen

Öffnen Sie die Konfigurationsdatei mit nano. Nano ist ein einfaches Texteditor, der in der Terminal anzeigt.

sudo nano /etc/apache2/sites-available/000-default.conf

Danach müssen Sie alle ursprünglichen Konfigurationen in diesen Dateien löschen und neue Konfigurationen hinzufügen. Befolgen Sie die folgenden Anleitungen, um die Konfiguration für die Single-Sourced-Web-App abzuschließen.

Zuerst müssen Sie alle Benutzeranfragen aus dem Internet auf Port 80 zu einer sicheren Adresse weiterleiten, die dann zu einer mit HTTPS gesicherten Adresse weitergeleitet wird. Das gewährleistet einen sicheren Informationsaustausch.

<VirtualHost *:80>
ServerName example.org

Redirect / https://example/
</VirtualHost>

Ersetzen Sie [example.org] durch Ihre Domain von Ihrem Manager Node.

Anschließend müssen Sie den Port 443 konfigurieren. Die Benutzeranfrage über diesen Port muss mit SSL verschlüsselt werden.

#Listen 443
<VirtualHost *:443>
  ServerName example

  ServerSignature Off
  SSLProxyEngine on
  # Enable HTTP/2, if available
  Protocols h2 http/1.1

  # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
  Header always set Strict-Transport-Security "max-age=63072000"

  # Configure SSL
  SSLEngine on
  SSLCertificateFile /etc/letsencrypt/live/example.org/fullchain.pem
  SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem
  SSLOpenSSLConfCmd DHParameters /etc/ssl/certs/dhparams.pem
  # Intermediate configuration from SSL-config.mozilla.org (2022-03-03)
  # Please note, that this configuration might be outdated - please update it accordingly using https://ssl-config.mozilla
  SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
  SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
  SSLHonorCipherOrder     off
  SSLSessionTickets       off
  
  # Jupyter-collaboration URL contains %, Apache must % understand
  AllowEncodedSlashes On

Ersetzen Sie [example.org] durch Ihre Domain von Ihrem Manager Node.

Danach müssen Sie Shibboleth so konfigurieren, dass nur die Nutzer, die bei Shibboleth eingeloggt sind, die Seiten dieser Single-Page-Web-App besuchen können.

#----------------------Shibboleth-------------------------------
UseCanonicalName On
Include /etc/shibboleth-ds/shibboleth-ds.conf
Redirect seeother /shibboleth https://example.org/Shibboleth.sso/Metadata
RedirectMatch /start-session$ /Shibboleth.sso/Login

<Location /Shibboleth.sso>
  AuthType None
  Require all granted
</Location>

<Location /shibboleth-sp>
  AuthType None
  Require all granted
</Location>

Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css

Ersetzen Sie [example.org] durch Ihre Domain von Ihrem Manager Node.

Sie müssen den Apache-Server so konfigurieren, dass er die statischen Dateien dieser Webanwendung korrekt findet. Dadurch kann der Apache-Server die richtigen Styling- und JavaScript-Funktionen laden, wenn Benutzer die Webseite besuchen.

#----------------------static files-----------------------------
      Alias /static /opt/jupyter-dhbw-swarm/static_volume
      <Directory /opt/jupyter-dhbw-swarm/static_volume>
          Require all granted
      </Directory>
    
      Alias /data /opt/exchange_data/data_kurs_app
      <Directory /opt/exchange_data/data_kurs_app>
          Require all granted
      </Directory>
    
      Alias /exercise_submissions /opt/exchange_data/data_kurs_app/exercise_submissions
      <Directory /opt/exchange_data/data_kurs_app/exercise_submissions>
          Require all granted
      </Directory>
    
      <Location /course>
    
        RewriteEngine On
        ProxyPreserveHost on
        ShibRequestSetting requireSession 1
        require valid-user
        ShibUseHeaders On
    
        ProxyPass http://ipv4_managernode:8008/course
        ProxyPassReverse http://ipv4_managernode:8008/course

        RequestHeader set HTTP_MAIL %{Mail}e env=Mail
        RequestHeader set HTTP_GIVENNAME %{Givenname}e env=Givenname
        RequestHeader set HTTP_SN %{Sn}e env=sn
        RequestHeader set HTTP_UID %{Uid}e env=Uid
      </Location>
    
      <Location />
        AuthType shibboleth
        Require shibboleth
      </Location>
    
      <Location /admin>
        ShibRequestSetting requireSession off
        ShibUseHeaders On
        RewriteEngine On
        ProxyPreserveHost On
    
    
        ProxyPass http://ipv4_managernode:8008/admin
        ProxyPassReverse http://ipv4_managernode:8008/admin
      </Location>
    
    
      <Location /auth>
        RewriteEngine On
        ProxyPreserveHost on
        ShibRequestSetting requireSession off
        ShibUseHeaders On    
        ProxyPass http://ipv4_managernode:8008/auth
        ProxyPassReverse http://ipv4_managernode:8008/auth
      </Location>

Ersetzen Sie [ipv4_managernode] durch Ihre IP Adresse des Manager Nodes.

Danach müssen Sie Jupyterhub so konfigurieren, dass nur die Nutzer, die bei Jupyterhub eingeloggt sind, die Seiten dieser Single-Page-Web-App besuchen können.

#----------------------Jupyterhub-------------------------------

      RewriteEngine On
    
      RewriteCond %{HTTP:Connection} Upgrade [NC]
      RewriteCond %{HTTP:Upgrade} websocket [NC]
      RewriteRule /jupyterhub/(.*) ws://ipv4_managernode:8000/jupyterhub/$1 [P,L]
      RewriteRule /jupyterhub/(.*) http://ipv4_managernode:8000/jupyterhub/$1 [P,L]

    
      <Location /jupyterhub>
        RewriteEngine On
        ProxyPreserveHost on
        # separate Shibboleth Authen. and Jupyterhub to avoid CROS error.
        ShibRequestSetting requireSession off
        ShibUseHeaders On
    
        ProxyPass        http://ipv4_managernode:8000/jupyterhub
        ProxyPassReverse http://ipv4_managernode:8000/jupyterhub
      </Location>
    
    </VirtualHost>

Unten sehen Sie die vollständige Konfiguration für Apache2. Sie müssen diese Konfiguration in die Datei 000-default.conf einfügen.

#Listen 80                                                                                                          #
      ServerName example.org
      ServerAlias www.example.org                                                                                     
      Redirect / https://example.org/
      </VirtualHost>
      
      #Listen 443
      <VirtualHost *:443>
        ServerName example.org
        ServerAlias www.example.org
      
        SSLProxyEngine on
        ServerSignature Off
      
        # Enable HTTP/2, if available
        Protocols h2 http/1.1
      
        # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
        Header always set Strict-Transport-Security "max-age=63072000"
        Header set Content-Security-Policy "frame-ancestors 'self' https://example.org">  # Configure SSL
        SSLEngine on
        SSLCertificateFile /etc/letsencrypt/live/example.org/fullchain.pem>  SSLCertificateKeyFile /etc/letsencrypt/live/example.org/privkey.pem>  #Include /etc/letsencrypt/options-ssl-apache.conf
        SSLOpenSSLConfCmd DHParameters /etc/ssl/certs/dhparams.pem
        # Intermediate configuration from SSL-config.mozilla.org (2022-03-03)
        # Please note, that this configuration might be outdated - please update it accordingly using https://ssl-config.>  SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
        SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA->  SSLHonorCipherOrder off
        SSLSessionTickets off
      
        # Jupyter-collaboration URL contains %, Apache must % understand
        AllowEncodedSlashes             On
        #----------------------Shibboleth-------------------------------
  UseCanonicalName          On
  Include     /etc/shibboleth-ds/shibboleth-ds.conf
  Redirect       seeother /shibboleth https://example.org/Shibboleth.sso/Metadata>  RedirectMatch /start-session$ /Shibboleth.sso/Login

  <Location /Shibboleth.sso>
    AuthType None
    Require all granted
  </Location>

  <Location /shibboleth-sp>
    AuthType None
    Require all granted
  </Location>

      Alias /shibboleth-sp/main.css /usr/share/shibboleth/main.css

#----------------------static files-----------------------------

  # Alias for Static Files
  Alias /static /opt/jupyter-dhbw-swarm/static_volume
  <Directory /opt/jupyter-dhbw-swarm/static_volume>
      Require all granted
  </Directory>

  # Alias for Data Files
  Alias /data /opt/exchange_data/data_kurs_app
  <Directory /opt/exchange_data/data_kurs_app>
    Require all granted
  </Directory>

  # Alias for Submission Files
  Alias /exercise_submissions /opt/exchange_data/data_kurs_app/exercise_submissions
  <Directory /opt/exchange_data/data_kurs_app/exercise_submissions>
      Require all granted
  </Directory>


  <Location /course>

    RewriteEngine On
    ProxyPreserveHost on
    ShibRequestSetting requireSession 1
    require valid-user
    ShibUseHeaders On

    ProxyPass http://ipv4_managernode:8008/course
    ProxyPassReverse http://ipv4_managernode:8008/course


    RequestHeader set HTTP_MAIL %{Mail}e env=Mail
    RequestHeader set HTTP_GIVENNAME %{Givenname}e env=Givenname
    RequestHeader set HTTP_SN %{Sn}e env=sn
    RequestHeader set HTTP_UID %{Uid}e env=Uid
  </Location>

  <Location />
    AuthType shibboleth
    Require shibboleth
  </Location>

  <Location /admin>
    ShibRequestSetting requireSession off
    ShibUseHeaders On
    RewriteEngine On
    ProxyPreserveHost On


    ProxyPass http://ipv4_managernode:8008/admin
    ProxyPassReverse http://ipv4_managernode:8008/admin
  </Location>


  <Location /auth>
    RewriteEngine On
    ProxyPreserveHost on
    ShibRequestSetting requireSession off
    ShibUseHeaders On

    ProxyPass http://ipv4_managernode:8008/auth
    ProxyPassReverse http://ipv4_managernode:8008/auth
  </Location>

  #----------------------Jupyterhub-------------------------------

  RewriteEngine On

  RewriteCond %{HTTP:Connection} Upgrade [NC]
  RewriteCond %{HTTP:Upgrade} websocket [NC]
  RewriteRule /jupyterhub/(.*) ws://ipv4_managernode:8000/jupyterhub/$1 [P,L]
  RewriteRule /jupyterhub/(.*) http://ipv4_managernode:8000/jupyterhub/$1 [P,L]

  <Location /jupyterhub>
    RewriteEngine On
    ProxyPreserveHost on
    # separate Shibboleth Authen. and Jupyterhub to avoid CROS error.
    ShibRequestSetting requireSession off
    ShibUseHeaders On

    ProxyPass        http://ipv4_managernode:8000/jupyterhub
    ProxyPassReverse http://ipv4_managernode:8000/jupyterhub
  </Location>

</VirtualHost>
  

Restart Service

Um die Änderungen zu übernehmen, müssen Sie den Apache Service neu starten.

sudo systemctl restart apache2

References

  1. Generelle Apache Konfiguration für Jupyterhub
  2. Generelle Apache Konfiguration für Shibboleth SP
  3. Generelle Apache Konfiguration für Shibboleth SP 2
  4. Apache Konfiguration für Vermeidung CORS Error in Browser
  5. Apache Konfiguration für bypassing Shibboleth Authentification
  6. Apache Konfiguration für jupyter-collaboration extension
  7. Anleitung für Installation Apache mit Shibboleth