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.
Ö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>
Um die Änderungen zu übernehmen, müssen Sie den Apache Service neu starten.
sudo systemctl restart apache2