nginx Setup

Wie man nginx erfolgreich installiert und einrichtet.

In dieser Anleitung wird beschrieben, wie du nginx unter Debian 10 installierst und für die Nutzung der PureLife Cloud konfigurierst. Die Installation ist optional und dann erforderlich, wenn der Zugriff auf die Webapp der PureLife Cloud abgesichert werden soll (z.B. Verwendung eines SSL Zertifikats).

Installation

1. Wir empfehlen die aktuelle Version von nginx zu nutzen. Hierzu sollte die offiziellen nginx Paketquellen zu apt hinzugefügt werden.

echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list
curl -L https://nginx.org/keys/nginx_signing.key | sudo apt-key add -
sudo apt-get update

2. Danach kann nginx installiert werden.

# Offizielle nginx Paketquelle
sudo apt-get install nginx
# Falls die Standard Debian Paketquelle genutzt wird
# sudo apt-get install nginx-full

Konfiguration

Im folgenden Abschnitt wird davon ausgegangen, dass mosquitto auf den gleichen Server installiert und gestartet ist. Sollte dies nicht der Fall sein, muss die Konfiguration angepasst werden.

1. Lade die h5bp-Konfiguration herunter.

mkdir /tmp/nginx-boilerplate
cd /tmp/nginx-boilerplate/
wget https://github.com/h5bp/server-configs-nginx/archive/refs/heads/main.zip
7z x main.zip
sudo cp -r server-configs-nginx-main/h5bp/ /etc/nginx/
sudo cp server-configs-nginx-main/nginx.conf /etc/nginx/nginx.conf
sudo cp server-configs-nginx-main/mime.types /etc/nginx/mime.types
cd /etc/nginx/
rm -r /tmp/nginx-boilerplate/

2. Überprüfe ob die Konfiguration richtig erkannt wurde.

sudo nginx -t

3. Erstelle eine Konfigurationsdatei für den Domain

touch /etc/nginx/conf.d/mein.domain.de.conf

4. Öffne die Datei mit einen Texteditor und füge folgendes ein.

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name mein.domain.de www.mein.domain.de;

    # SSL config
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/key.pem;
    ssl_trusted_certificate /path/to/your/fullchain.pem;

    # HSTS aktivieren
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    include h5bp/tls/ssl_engine.conf;
    include h5bp/tls/policy_balanced.conf;
    include h5bp/tls/ocsp_stapling.conf;

    # Adjustments for basic.conf
    include h5bp/security/referrer-policy.conf;
    # include h5bp/security/x-content-type-options.conf; # # Sent through PureLife Cloud
    # include h5bp/security/x-frame-options.conf; # Sent through PureLife Cloud
    include h5bp/location/security_file_access.conf;
    include h5bp/cross-origin/requests.conf;

    # Redirect from http to https on the same port
    error_page 497 https://$server_name:$server_port$request_uri;

    # To allow special characters in headers
    ignore_invalid_headers off;

    http2_push_preload on; # Enable HTTP/2 Server Push

    # PureLife Cloud SSE-Verbindung
    location /api/v1/sse {
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Host $http_host;

       proxy_set_header Connection '';
       proxy_http_version 1.1;
       chunked_transfer_encoding off;

       proxy_buffering off;
       proxy_cache off;

       proxy_pass http://purelife-cloud-backend;
    }


    location /api/v1/system/live-log {
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Host $http_host;

       proxy_set_header Connection '';
       proxy_http_version 1.1;
       chunked_transfer_encoding off;

       proxy_buffering off;
       proxy_cache off;

       proxy_pass http://purelife-cloud-backend;
    }

    location / {
       proxy_set_header X-Real-IP $remote_addr;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto $scheme;
       proxy_set_header Host $http_host;

       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 300s;

       client_max_body_size 50M;
       proxy_http_version 1.1;
       proxy_hide_header X-Version-Id;
       proxy_pass http://purelife-cloud-backend;
    }
}

5. Überprüfe ob nginx die Konfiguration richtig erkannt hat.

sudo nginx -t

6. Starte nginx neu.

sudo systemctl reload nginx.service