<- nginx
Reverse Proxy mit nginx
nginx
nginx installieren
https://www.nginx.com/resources/wiki/start/#installing-configuring-nginx
nginx Dokumentation: Installation unter Ubuntu
nginx Konfigurationsdateien
Artikel zur Konfiguration von nginx
nginx Dokumentation: Beispielkonfigurationen für diverse Anwendungen
Die nginx Hauptkonfigurationsdatei findet man unter /etc/nginx/conf.d/
In meinen Fall findet man dort den Verweis auf zwei weitere Verzeichnisse: /etc/nginx/conf.d/
und /etc/nginx/sites-enabled/
In der Datei nginx.conf
ist dies bei mir dieser entsprechende Abschnitt:
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
2
3
4
5
6
Im Verzeichnis /etc/nginx/conf.d/
werden alle Dateien mit der Endung .conf
mit eingelesen. Dies wurde durch das /*.conf;
am Ende der include
Anweisung festgelegt. Soll eine dort liegende Konfigurationsdatei nicht ausgeführt werden, so muss die Dateiendung geändert werden, z.B. auf .disabled
.
Im Verzeichnis /etc/nginx/sites-enabled/
werden alle dort liegenden Dateien berücksichtigt, festgelegt durch das /*;
am Ende der entsprechenden include
Anweisung. Soll eine Datei dort nicht ausgeführt werden, muss diese aus dem Verzeichnis entfernt werden, z.B. durch verschieben in den Ordner /etc/nginx/sites-available
.
Beispiel Konfigurationsdatei für einen virtuellen nginx Host
Beispiel für eine Reverse Proxy Konfiguration
Artikel: Basic Configuration an NGINX Reverse Proxy
Der Dateiname kann beliebig sein. Im Beispiel oben würde man z.B. im Verzeichnis /etc/nginx/conf.d/
die Datei herwig.de.conf
benennen und wenn man sie alternativ im Verzeichnis /etc/nginx/sites-enabled/
verwendet, nur herwig.de
.
server {
listen 80;
listen [::]:80;
server_name herwig.de;
location / {
proxy_pass http://192.168.1.100/;
}
}
2
3
4
5
6
7
8
9
10
Im Abschnitt server
wird der virtuelle Host definiert. Hier der Server/Host mit dem Namen herwig.de. Alle Anfragen, die für herwig.de auf dem Port 80 IPv4 (listen 80;
) und dem Port 80 IPv6 reinkommen, werden hier behandelt.
Im Bereich location
wird in diesem Fall festgelegt, dass die Reverse Proxa Funktion verwendet wird und alle Anfragen vom root (/
) an zu http://192.168.1.100/;
weitergegeben werden.
zusätzliche Optionen für den Reverse Proxy
location / {
proxy_pass http://192.168.1.100/;
# schaltet den Buffer des Proxys für die Verbindung aus,
# z.B. für node.js Applicationen mit Realtime Interaktionen
proxy_buffering off;
# sendet die IP-Adresse des Clients zum Host
proxy_set_header X-Real-IP $remote_addr;
}
2
3
4
5
6
7
8
9
10
11
Matomo (Piwik) auf nginx mit Reverse Proxy
nginx Dokumentation: Beispielkonfiguration für Matomo/Piwik
Sollte nginx als Reverse Proxy genutzt werden und als Reverse-Proxy auf den Trackingdienst Matomo (Piwik) zeigen, so sind die Konfigurationsdateien von Matomo und nginx entsprechend anzupassen.
Artikel auf Matomo - If Matomo is behind a reverse Proxy (mit nginx nicht ganz hilfreich)
Artikel: Make Piwik Detect the Header X-Forwarded-For or X-Real-IP (führte zur Lösung)
nginx Konfigurationsdatei
Wenn die Konfiguration des virtuellen Host unter /etc/nginx/conf.d/
.
In der Konfigurationsdatei (/etc/nginx/conf.d/dateiname.conf
) der Domäne für den Reverse Proxy sind folgende Einstellungen vorzunehmen:
location / {
...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-forwarded-host $host;
...
}
2
3
4
5
6
Mit proxy_set_header X-Real-IP $remote_addr;
wird die ankommende IP-Adresse auf den HTTP Header HTTP_X_REAL_IP
ausgegeben. Amalog dazu wird der Hostname auf dem HTTP Header HTTP_X_FORWARDED_HOST
übertragen.
Matomo Konfigurationsdatei
Nun muss man noch Matomo mitteilen, auf welchen HTTP HEADER die jeweilige Information übertragen wird.
Dazu ist die entsprechende Konfigurationsdatei der Matomo Webseite anzupassen.
Diese findet man im Matomo/Piwik Verzeichnis, z.B.: /srv/webseitenname/piwik/config
. Wobei in diesem Beispiel die Matomodateien im Verzeichnis piwik
installiert wurden.
force_ssl = 1
assume_secure_protocol = 1
proxy_host_headers[] = HTTP_X_FORWARDED_HOST
proxy_client_headers[] = HTTP_X_REAL_IP
2
3
4
intern https nutzen
Variante ohne eigene CA
Artikel: HTTPS behind your reverse proxy
nginx Kommandos
https://www.nginx.com/resources/wiki/start/topics/tutorials/commandline/
Die nginx Willkommensseite deaktivieren
Wenn die default Seite im Verzeichnis /etc/nginx/conf.d/
liegt:
sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
Sollte die Default-Konfiguration im Verzeichnis /etc/nginx/sites-enabled/
liegen:
sudo mv /etc/nginx/sites-enabled/default /etc/nginx/sites-available/default
Test der nginx Konfiguration
sudo nginx -t
nginx Konfiguration übernehmen
sudo nginx -s reload
nginx als Reverse-Proxy für Estos UC-Server Webservice
Estos Anleitung: Veröffentlichung UCServer Webservie - best practice
Webserver härten
Artikel: Linux Webserver einrichten und betreiben
https mit Let`s Encrypt
Um eigene Seiten auf dem nginx Webserver oder unverschlüsselte Seiten hinter dem Reverse-Proxy mit https zu betreiben kann Let`s Entcrypt verwendet werden.
Artikel: Configure HTTPS with CertbotPermalink
Artikel: How To Secure Nginx with Let's Encrypt on Ubuntu 18.04
Artikel: Letsencrypt installieren
Generelle Vorgehensweise für Let`s Encrypt
Port 80 und 443 müssen über das Internet für die Domäne, für die ein Let`s Encrypt Zertifikat angelegt werden soll, erreichbar sein.
Eine Webseite muss auf Port 80 angelegt sein.
Ein Tool unterstützt die Einrichtung für ein Let`s Encrypt Zertifikat. Solche Tools sind z.B. für Ubuntu (für nginx und Apache) und Windows IIS Server verfügbar.
Das Let`s Encrypt Zertifikat kann dann auch für andere Ports/Dienste verwendet werden, z.B. für Estos SIP (Estos ProCall Enterprise, Microsoft Skype for Business, ...) und XMPP (Jabber, Google, ...) Federation.
zu beachten
Der Automatismus zur Erneuerung der Let`s Zertifikate funktioniert für die Webseite mit Port 443. Für Estos Federation muss das Zertifikat dann wahrscheinlich über die Microsoft Management Console (MMC) nach der automatischen Erneuerung manuel importiert werden (noch nicht getestet). Dazu muss das Snap-In "Zertifikate" hinzugefügt werden.
Let`s Encrypt mit Windows IIS Server
Für unseren Anwendungsfall Reverse-Proxy mit nginx unter Ubuntu wird dies nicht benötigt. Der Vollständigkeit halber sind die Informationen zur Nutzung von Let`s Encrypt mit Windows IIS hier kurz aufgeführt.
Beschreibung zur Einbindung von Let`s Encrypt Zertifikaten unter Windows
Windows Tool win-acme für Let`s Encrypt
Zertifikateverwaltung mit MMC
Let`s Encrypt Zertifikat exportieren, um es dem Computer hinzuzufügen:
Nach der automatischen Installation des Let`s Encrypt Zertifikat durch das Tool win-acme liegt diese in dem Programmverzeichnis, von dem win-acme ausgeführt wurde.
Das im IIS automatisch importierte Zertifikat kann über den Internetinformationsdienste (IIS)-Manager unter dem "Server / Serverzertifikate" ausgewählt werden. Dort kann es angeklickt, exportiert und mit einem Passwort versehen werden.
Let`s Encrypt Zertifikat zum Windows Server hinzufügen:
- Snap In Zertifikate zur MMC hinzufügen
- Computerkonto auswählen
- dann Zertifikate / Eigene Zertifikate /Zertifikate auswählen
- In der Mitte werden die installierten Zertifikate angezeigt
- rechts kann man unter "Aktionen / Zertifikate / Alle Aufgaben / importieren" das aktuelle Let`s Encrypt Zertifikat importieren
- Das Let`s Encrypt Zertifikat hat die Endung *.PFX
zu testen (todo)
Eventuell reicht ein Doppelklick auf die Zertifikatsdatei im win-acme Verzeichnis, um dieses auf dem Server zu importieren.
Ubuntu cerbot installieren
Damit die Installation des Certbot ausgeführt wurde, musste die Datei /etc/apt/sources.list
um eine vierte Zeile ergänzt werden.
sudo nano /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu bionic main
deb http://archive.ubuntu.com/ubuntu bionic-security main
deb http://archive.ubuntu.com/ubuntu bionic-updates main
deb http://archive.ubuntu.com/ubuntu bionic restricted universe
2
3
4
Information: offiziellen Quellen für Ubuntu 18.04 (Bionic)
Die offiziellen Quellen für Ubuntu 18.04 LZS (Bionic) sind z.B. hier aufgelistet: https://wiki.ubuntuusers.de/sources.list/#Ubuntu-18-04
Die Installation des Certbots wird dann wie folgt durchgeführt:
sudo apt update
sudo apt install certbot python3-certbot-nginx
2
nginx Konfiguration mit letsencrypt
sudo certbot --nginx
Konfigurationsdateien werden durchsucht und die mögliche Auswahl angeboten:
$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: subdomain.herwig.de
2: iobroker.mhe
3: herwig.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
2
3
4
5
6
7
8
9
10
11
12
Auswahl: 3 für herwig.de
blank to select all options shown (Enter 'c' to cancel): 3
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for herwig.de
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/herwig.de.conf
Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Auswahl: 2 für http Redirect to https
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Redirecting all traffic on port 80 to ssl in /etc/nginx/conf.d/herwig.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://herwig.de
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=herwig.de
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/herwig.de/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/herwig.de/privkey.pem
Your cert will expire on 2018-12-15. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the "certonly" option. To non-interactively renew *all* of
your certificates, run "certbot renew"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Automatisch angepasste Konfigurationsdatei:
server {
server_name herwig.de;
location / {
proxy_pass http://192.168.1.100/;
}
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/herwig.de/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/herwig.de/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = herwig.de) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name herwig.de;
return 404; # managed by Certbot
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Testen der Auto-Renewal Funktion
sudo certbot renew --dry-run