GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Eine Anleitung zum Ausführen eines Reverse-Proxys für HTTP(S), SSH und MySQL/MariaDB mit NGINX

Dieser Leitfaden führt Sie durch die Installation und Konfiguration von NGINX, um den Betrieb mehrerer physischer Server, virtueller Maschinen oder einer Kombination aus beidem hinter einer einzigen öffentlich zugänglichen IP-Adresse zu ermöglichen. Sie können eine Reihe von Webservern auf virtuellen Maschinen ausführen und diese lokal verwalten, oder Sie müssen möglicherweise Tools für den Fernzugriff wie SSH auf jeden der Hosts verwenden. Zum Beispiel, wenn der lokale Zugriff außerhalb der normalen Geschäftszeiten nicht verfügbar ist. Diese Anleitung kann beide Szenarien erleichtern.

Die hier gezeigten Konfigurationen eignen sich am besten für ein Heimlabor oder ein kleines Unternehmensnetzwerk mit Einschränkungen bei den verfügbaren öffentlichen IP-Adressen. Wenn Sie mehrere Server oder virtuelle Maschinen von einem Hosting-Dienst gemietet haben, gibt es kaum einen Grund, eine Konfiguration wie diese auszuführen, da Ihnen ohnehin eine öffentliche IP-Adresse für jeden Server oder Host zugewiesen wird.

Ich werde Ihnen zeigen, wie Sie NGINX installieren und Konfigurationen vornehmen, die es dem Server ermöglichen, als Reverse-Proxy für HTTP(S), SSH, FTP und MySQL/MariaDB zu fungieren. Ich gehe davon aus, dass Sie für den NGINX-Hostserver Folgendes haben:lokalen Zugriff, eine Neuinstallation von Ubuntu 18.04 und dass Sie sich während der Installationsschritte des Ubuntu-Servers für die Installation des SSH-Servers entschieden haben.

Diese Konfiguration funktioniert gut für mich, aber bitte haben Sie Verständnis dafür, dass ich keine Garantie dafür übernehmen kann, dass dies bei Ihnen funktioniert. Wenn Sie etwas falsch finden, lassen Sie es mich natürlich wissen, damit es korrigiert werden kann. Bitte stellen Sie sicher, dass Sie die gesamte Anleitung lesen, bevor Sie beginnen. Es gibt einen Teil (Streams), in dem ich zwei Möglichkeiten zeige, wie Sie damit umgehen können.

Erste Schritte

In diesem Handbuch verwende ich die folgenden Hostnamen und IP-Adressen.

rproxy.example.com  192.168.1.1
web1.example.com    192.168.1.2
db1.exmple.com      192.168.1.3

Für eine standardmäßige Ubuntu 18.04-Serverinstallation, die Sie während der Installation erstellt haben, sollten Sie auf dem Server über ein Nicht-Root-Benutzerkonto verfügen. Melden Sie sich zunächst bei dem Server an, auf dem Sie NGINX mit diesem Benutzer installieren werden. Da es sich höchstwahrscheinlich um einen lokalen Server handelt, müssen Sie sich möglicherweise beim ersten Mal direkt am Server anmelden, um den SSH-Server zu konfigurieren. Dazu benötigen Sie natürlich eine Tastatur und einen Monitor, die an den Server angeschlossen sind.

Hinweis:Wenn Sie wie ich Virtualisierungssoftware wie VMWare verwenden, die eine Browserschnittstelle enthält, sollten Sie eine Konsole in diesem System haben und diesen Schritt ohne "direkten" Zugriff ausführen können. Sie könnten versuchen, diese gesamte Konfiguration innerhalb dieser Konsole durchzuführen, aber ich habe festgestellt, dass einige Funktionen wie Kopieren und Einfügen in der browserbasierten Konsole nicht funktionierten, obwohl dies browserspezifisch sein könnte, so dass es sich lohnen könnte, dies zu versuchen du kannst.

Vorbereiten des Hostservers

In Ihrer Konsolen-Shell (Browser oder direkt verbunden)

sudo nano /etc/ssh/sshd_config

Entkommentieren Sie die Zeilen:Port ändern Sie die Portnummer auf etwa 23456, ListenAddress und ändern Sie diese auf 0.0.0.0. Für diejenigen, die mit Nano möglicherweise nicht vertraut sind, drücken Sie STRG + X, geben Sie y ein und drücken Sie dann die Eingabetaste. Dadurch wird eine Datei gespeichert und geschlossen. Wenn keine Änderungen an der Datei vorgenommen wurden, wird STRG + x die Datei schließen, ohne zum Speichern aufzufordern. Sie kehren zur Eingabeaufforderung zurück.

Ich werde mich nicht mit den restlichen Einstellungen in dieser Datei befassen, da dies bereits eine ziemlich lange Anleitung ist und es viele Anleitungen gibt, die Ihnen zeigen, welche Einstellungen Sie für eine Reihe von Dingen ändern sollten, z. B. die Verwendung von SSH-Schlüsseln und das Zulassen von Root-SSH Anmeldung. Sie finden diese Anleitungen auch direkt hier auf der HowtoForge-Website.

Wenn die Änderungen abgeschlossen sind, müssen Sie den SSH-Server neu starten, damit die Änderungen wirksam werden. Ihre aktuelle Anmeldung ist von diesem Neustart nicht betroffen.

systemctl restart ssh

Stellen Sie sicher, dass Sie sich mit SSH von einem Terminal auf einem anderen Computer innerhalb Ihres lokalen Netzwerks anmelden können.

ssh [email protected] -p23456

Lassen Sie dieses Terminal geöffnet, nachdem Sie sich erfolgreich mit SSH angemeldet haben, und melden Sie sich von der Konsole/dem Server ab. Sie müssen es für den Rest dieser Anleitung nicht mehr verwenden.

Von diesem Punkt an führen Sie Befehle auf Root-Ebene von Ihrem Terminal aus aus. Der nächste Befehl beseitigt die Notwendigkeit, nachfolgenden Befehlen sudo voranzustellen.

sudo -s

Aktualisieren Sie die Apt-Paketdatenbank und aktualisieren Sie Ubuntu, um sicherzustellen, dass Sie die neuesten Pakete installiert haben.

apt update && apt -y upgrade

Sollten Sie während des Upgrades etwas sehen, das meldet, dass neue Kernel installiert werden, sollten Sie nach Abschluss des Upgrades von apt neu starten, um sicherzustellen, dass Sie auf einem vollständig aktualisierten System arbeiten.

Einstellen des Hostnamens des Reverse-Proxy-Servers.

hostnamectl set-hostname rproxy.example.com

Wenn Sie einen virtuellen Server ausführen, haben Sie möglicherweise eine Datei namens cloud.cfg, die geändert werden muss, um den hier festgelegten Hostnamen beizubehalten. Der folgende Befehl zeigt entweder eine Datei mit Inhalt oder eine leere Seite. Wenn Sie eine leere Seite sehen, können Sie einfach STRG + x drücken und diesen Schritt überspringen, da Sie nichts tun müssen.

nano /etc/cloud/cloud.cfg

Ändern Sie die Zeile zum Beibehalten des Hostnamens in true und schließen/speichern Sie die Datei.

If your system is currently local only you will need to show this server where your other servers/virtual hosts are.
nano /etc/hosts

Nachdem Sie die Änderungen vorgenommen haben, sieht die Hosts-Datei in etwa so aus, die IP-Adressen und Hosts sollten mit Ihrer eigenen Infrastruktur übereinstimmen.

127.0.0.1 localhost
127.0.1.1  rproxy.example.com
192.168.1.2    web1.example.com
192.168.1.3    db1.example.com

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Installation von NGINX

apt install -y nginx

Nach der Installation sollten Sie Ihre NGINX-Version überprüfen, es ist von größter Bedeutung, dass Sie eine Version 1.9 oder höher haben, damit Sie den Proxy für SSH und MySQL/MariaDB umkehren können.

nginx -v

Wie Sie sehen können, habe ich NGINX Version 1.14 installiert, was der Standard in Ubuntu 18.04 (10. Oktober 2019) ist

nginx version: nginx/1.14.0 (Ubuntu)

Vorbereitung von NGINX für die Funktion als Reverse-Proxy

Mit dieser Konfiguration bedienen Sie keine Websites direkt vom Reverse-Proxy-Hostserver. Sie erstellen eine neue Verzeichnisstruktur unter /etc/nginx/. Dadurch bleiben die standardmäßigen NGINX-Konfigurationen erhalten, falls Sie diese Änderungen später rückgängig machen oder entscheiden möchten, dass Sie tatsächlich auch Websites direkt von diesem Host aus bedienen möchten. Es ist möglich, die Standardkonfiguration zusammen mit diesen Reverse-Proxy-Konfigurationen auszuführen. Wenn sich Apache2 jedoch auf demselben Server befindet, benötigt es alternative Ports zum Abhören, und Sie müssen die Websites, die diese Instanz von Apache2 bedient, weiterhin per Reverse-Proxy ausführen.

Erstellen Sie die Reverse-Proxy-Verzeichnisstruktur

cd /etc/nginx && mkdir rproxy && cd rproxy && mkdir http http/available http/enabled stream stream/available stream/enabled

Nachdem Sie nun die Struktur eingerichtet haben, können Sie mit der Erstellung der Konfigurationsdateien fortfahren. Ich verwende Nano, aber Sie können den Editor verwenden, mit dem Sie sich wohl fühlen. Nano erstellt/aktualisiert die Dateien beim Speichern.

Before you proceed, open an empty document on your computer or get a pen and paper to note down the ports you configure.

Konfigurieren von Webserver-Reverse-Proxies (http)

Erstellen Sie die HTTP-Konfigurationsdatei(en) für die Website(s) und passen Sie sie entsprechend an

nano http/available/example.com.conf

Kopieren Sie den Serverblock in die im Terminal geöffnete Seite, wobei Nano entsprechend angepasst wird.

# Note down ports 80 and 443

server {
    server_name example.com www.example.com;
    listen 80;
    set $upstream 192.168.1.2;
    location / {
         proxy_pass_header Authorization;
         proxy_pass http://$upstream;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_http_version 1.1;
         proxy_set_header Connection "";
         proxy_buffering off;
         client_max_body_size 0;
         proxy_read_timeout 10000s;
         proxy_redirect off;
     }
}

Konfigurieren von SSH-, MySQL/MariaDB-Reverse-Proxys (Stream)

Bevor Sie fortfahren, entscheiden Sie, welche Sie verwenden möchten, pro Host oder pro Dienst. Pro Host erstellen Sie eine Konfiguration für jeden Host, die nützlich sein kann, um die Einstellungen eines einzelnen Hosts schnell zu ändern. Pro Dienst haben Sie die Dienstports für alle Server in einer Datei für SSH, MySQL/MariaDB und FTP.

Konfigurationen pro Dienst verwenden

Fügen Sie die SSH-Konfigurationen hinzu.

nano stream/available/ssh.conf
# Note down the listen ports

upstream web1-ssh {
  server 192.168.1.2:22;
}

server {
  listen 22002;
  proxy_pass web1-ssh;
}

upstream db1-ssh {
  server 192.168.1.3:22;
}

server {
  listen 22003;
  proxy_pass db1-ssh;
}

# Add as many upstream and server block pairs as you will need for your remote accessed SSH servers.

Fügen Sie die MySQL/MariaDB-Konfigurationen hinzu.

nano stream/available/db.conf
# Note down the listen ports

upsteam db1-mysql {
  server 192.168.1.3:3306;
}

server {
  listen 33063;
  proxy_pass db1-mysql;
}

# Add as many upstream/server block pairs as you will need for your remote accessed MySQL/MariaDB servers to this file.

Erstellen Sie nun die FTP-Reverse-Proxy-Konfigurationen.

nano stream/available/ftp.conf
upstream web1-ftp {
  server 192.168.1.3:21
}

server {
  listen 21002;
  proxy_pass web1-ftp;
}

# Add as many upstream/server block pairs as you will need for your remote accessed FTP servers.

Konfigurationsdateien pro Host verwenden

nano /etc/nginx/rproxy/stream/available/web1.example.com.conf
# Note down the listen ports

upstream web1-ssh {
  server 192.168.1.3:22;
}

server {
  listen 22002;
  proxy_pass web-ssh;
}

Erstellen der Hostdatei für db1.example.com

nano /etc/nginx/rproxy/stream/available/db1.example.com.conf
# Note down the listen ports

upsteam db1-mysql {
  server 192.168.1.3:3306;
}

server {
  listen 33063;
  proxy_pass db1-mysql;
}

upstream db1-ssh {
  server 192.168.1.3:22;
}

server {
  listen 22003;
  proxy_pass db1-ssh;
}

Wie Sie sehen können, ist es ein wenig unorthodox. Sie verwenden öffentliche Ports auf nicht standardmäßige Weise, wählen die Ports aus, die Sie benötigen, und verweisen sie dann auf NGINX. Dies wäre normal, außer dass Sie jetzt für jeden Dienst auf jedem Server, auf den Sie remote zugreifen möchten, einen anderen Port verwenden. Am Beispiel von SSH bedeutet dies, dass eine andere Portnummer für jeden SSH-fähigen Host, z. B. 22 222 2222 22222, auf Port 22 auf vier verschiedenen Servern oder virtuellen Maschinen zeigen würde.

Dies ist bei NGINX to Reverse Proxy für Websites nicht der Fall, solange NGINX eine Serverkonfiguration für eine Website definiert hat, funktioniert es korrekt, wenn nur die Ports 80 und 443 an es weitergeleitet werden.

An diesem Punkt haben Sie wahrscheinlich erkannt, dass Sie einfach die HTTP-Schritte verwenden und die Stream-Schritte überspringen und stattdessen mehrere Ports für die mehreren Dienste an den entsprechenden Server/die entsprechende IP-Adresse weiterleiten könnten. Tatsächlich kann dies getan werden. Es würde jedoch eine weitere Ebene der Komplexität hinzufügen und schwieriger zu warten sein, wenn die Anzahl der Server zunimmt, da Sie möglicherweise die Standardports auf jedem Server für ssh, mysql und ftp ändern müssen. Diese Konfiguration ist bereits komplex, könnte aber trotzdem gemacht werden, wenn Sie wollten.

Die Verwendung eines Reverse-Proxys für diese Dienste, wie ich Ihnen gezeigt habe, verringert die Komplexität erheblich, indem ein einziger Ort bereitgestellt wird, an dem diese Konfigurationsänderungen vorgenommen werden können, und Sie müssten keine Änderungen an den Ports in Ihrer gesamten Infrastruktur vornehmen.

Als zusätzlichen Bonus zu dieser Konfiguration müssen die anderen Server in Ihrer Infrastruktur nur auf lokalen Schnittstellen und Standardports lauschen, wenn Sie dies bevorzugen. Wenn Sie lokal verwalten, können Sie die lokalen IP-Adressen und Standarddienstports verwenden, um auf die erforderlichen Dienste zuzugreifen, sodass Sie nicht auf Ihre Notizen verweisen müssen, um sich an die richtigen Ports zu erinnern. Sie müssen nur die IP-Adresse und die Anmeldedaten kennen.

Alles zusammenbringen

Um mit der Verwendung der NGINX-Reverse-Proxy-Konfigurationen zu beginnen, müssen Sie einige Änderungen an der Hauptkonfigurationsdatei vornehmen. Kommentieren Sie die aktuelle Include-Zeile im http-Block aus (wenn Sie Websites nicht auch direkt von NGINX aus bedienen).

cd /etc/nginx && nano nginx.conf

Beachten Sie die hervorgehobenen Teile unten, um festzustellen, was geändert werden muss.

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;

        gzip on;

        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascri$

        ##
        # Virtual Host Configs
        ##

        include /etc/nginx/conf.d/*.conf;
#       include /etc/nginx/sites-enabled/*;

        # Reverse proxy http configuration files.
        include /etc/nginx/rproxy/http/enabled/*.conf;
}

stream {

    # Reverse proxy stream configuration files.
    include /etc/nginx/rproxy/streams/enabled/*.conf;
}


#mail {
#       # See sample authentication script at:
#       # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
# 
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}
    

Aktivieren Sie die Reverse-Proxy-Konfigurationen.

Aktivieren Sie zunächst alle HTTP-Konfigurationen

ln -s /etc/nginx/rproxy/http/available/*.conf /etc/nginx/rproxy/http/enabled

Aktivieren Sie alle Stream-Konfigurationen

ln -s /etc/nginx/rproxy/stream/available/*.conf /etc/nginx/rproxy/stream/enabled

Führen Sie einen Test durch, um zu prüfen, ob die Konfiguration von NGINX als Reverse-Proxy korrekt ist.

nginx -T

In der Ausgabe sollten Sie eine Erfolgsmeldung zusammen mit allen benutzerdefinierten Konfigurationen sehen, die Sie zuvor vorgenommen haben.

Starten Sie NGINX neu, um die Reverse-Proxy-Konfigurationen in Aktion zu setzen.

systemctl restart nginx

Stellen Sie sicher, dass NGINX auf allen konfigurierten Ports lauscht. Überprüfen Sie anhand Ihrer Notizen, ob alle Ports in den Ergebnissen angezeigt werden.

netstat -tulpn | grep nginx

Die Ausgabe sollte in etwa so aussehen

tcp        0      0 0.0.0.0:22           0.0.0.0:*               LISTEN      4964/nginx: master  
tcp        0      0 0.0.0.0:22002           0.0.0.0:*               LISTEN      4964/nginx: master  
tcp        0      0 0.0.0.0:22003           0.0.0.0:*               LISTEN      4964/nginx: master
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      4964/nginx: master  
tcp        0      0 0.0.0.0:33062           0.0.0.0:*               LISTEN      4964/nginx: master  
tcp        0      0 0.0.0.0:33063           0.0.0.0:*               LISTEN      4964/nginx: master  
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      4964/nginx: master  
    

Öffnen des Servers für Traffic

Jetzt, da NGINX zuhört und bereit ist, als Reverse-Proxy für alle Verbindungen zu fungieren, die wir zulassen möchten, deaktivieren Sie UFW vorübergehend, während Sie die nächsten Schritte ausführen. Es erleichtert die Fehlersuche, falls etwas nicht richtig funktioniert.

ufw disable

Weiterleitungsports

Leider kann ich dir hier keine Anleitung geben. Sie müssen im Handbuch Ihres Routers nachsehen oder online nach Ihrem Router suchen, um zu erfahren, wie das geht. Zusammenfassend möchten Sie jedoch jeden der Ports, auf denen NGINX lauscht, an den NGINX-Hostcomputer weiterleiten. In meinem spezifischen Router kann ich benutzerdefinierte "Anwendungen" einrichten.

Dadurch kann ich der benutzerdefinierten Anwendung eine beliebige Anzahl nicht zugewiesener Ports oder Portbereiche zuweisen, die dann entweder einer LAN-IP-Adresse oder einem bestimmten angeschlossenen Gerät zugewiesen werden, das durch seinen Hostnamen identifiziert wird. In jedem Fall bedeutet dies, dass ich alle Ports, die dieser benutzerdefinierten Anwendung zugewiesen sind, auf einen beliebigen Host in meinem Netzwerk umschalten kann, ohne alle Ports löschen und neu zuweisen zu müssen. Dies ist eine ausgezeichnete Option, und ich empfehle Ihnen dringend, einen Router zu wählen, der dies unterstützt.

Diese kleine, aber unglaublich nützliche Funktion in der Firewall meines Routers veranlasste mich, einen zweiten Reverse-Proxy zu installieren, der die Konfigurationen meines aktiven Reverse-Proxys widerspiegelt. Ich habe es ausgeschaltet und kann in weniger als 3 Minuten nach der Erkennung hochfahren und die Ports darauf umschalten. Ich kann mir vorstellen, dass es professionelle Hosting-Unternehmen gibt, die Schwierigkeiten haben würden, diese Bearbeitungszeit für die Notfallwiederherstellung einzuhalten, und all dies entstand aus dem Wunsch heraus, mehrere Server in einem Heimnetzwerk zu betreiben.

Kostenloses Letsencrypt-SSL für den Reverse-Proxy-Server

Installieren Sie Certbot und das Certbot NGINX-Plugin. Dieser Schritt wird hier ausgeführt, da Sie kein Zertifikat erstellen können, bis Sie über ein funktionsfähiges DNS für alle in einem Zertifikat aufgeführten (Sub-)Domänennamen verfügen und über HTTP eine Verbindung zur Domäne herstellen können. Wenn Sie dies abschließen, nachdem Sie die Ports an den Reverse-Proxy weitergeleitet haben, dient dies auch als zusätzlicher Test für Ihre Konfigurationen. Wenn das Zertifikat fehlschlägt, weil die Domäne nicht erreicht werden kann, sehen Sie einen aussagekräftigen Fehlerhinweis in der Ausgabe.

Um sicherzustellen, dass Sie die neueste certbot-Version erhalten, fügen Sie vor der Installation das certbot-Repository hinzu. Ubuntu-Repositories sind oft eine Version oder mehr hinter einer Softwareversion und Sie möchten wirklich die neuesten Stavle-Versionen Ihrer gesamten Software, wenn Sie sie bekommen können.

add-apt-repository ppa:certbot/certbot
apt install -y certbot python-certbot-plugin

Wenn certbot und das certbot nginx Plugin installiert sind, können Sie jetzt die Zertifikate für NGINX erstellen.

Dieser Befehl sollte für alle Domains und Subdomains wiederholt werden, für die Sie SSL bereitstellen möchten. Wenn Sie certbot zum ersten Mal ausführen, müssen Sie die Nutzungsbedingungen akzeptieren.

certbot --nginx -d example.com -d www.example.com

Beachten Sie, dass Sie bei einem funktionierenden Server-Setup mit SSL auf dem Upstream-Host sicherstellen müssen, dass die hier ausgewählten Optionen mit denen auf dem Host-Server übereinstimmen, insbesondere wenn Sie auf dem Upstream-Server auf https umleiten, sollten Sie dies auch hier tun .

Aus Gründen der Übersichtlichkeit existiert example.com auf einem anderen Server, und ich habe mich dafür entschieden, http auf https innerhalb von ISPConfig umzuleiten, also wähle ich aus diesem Grund, dies hier zu tun. Die Konfigurationsdatei wird aktualisiert und ich sehe jetzt, dass Certbot einige eigene Konfigurationen hinzugefügt hat.

Überprüfen, ob die Dinge funktionieren.

Jetzt, da der Datenverkehr zu Ihrem Reverse-Proxy fließen kann, sollten Sie überprüfen, ob alles wie vorgesehen funktioniert. Überprüfen Sie, ob Websites ordnungsgemäß funktionieren, führen Sie SSH-, FTP- und MySQL/MariaDB-Verbindungen und -Aufgaben durch. Sobald Sie zufrieden sind, dass alles so funktioniert, wie es sein sollte, aktivieren Sie UFW und fügen Regeln hinzu, um jeden der Ports zuzulassen.

Sicherung des Reverse-Proxy-Servers

ufw enable

Sie werden 80 und 443 von überall zulassen wollen. und wahrscheinlich SSH, FTP und MySQL/MariaDB auf eine IP-Adresse oder einen Hostnamen beschränken. Sie können die Regeln kommentieren, um schnell zu erkennen, welchem ​​Dienst/Server Sie den Port zugewiesen haben.

ufw allow 80
ufw allow 443
ufw allow from 1.2.3.4 to any port 22002 comment 'web1 SSH'
ufw allow from somehost.domain.com to any port 33061 comment 'db1 MySQL/MariaDB'

ufw reload
ufw status numbered

Apache2 aktualisieren

Bei der Ausführung hinter einem Reverse-Proxy zeichnen Apache2-Protokolldateien die IP-Adresse des Reverse-Proxy-Servers anstelle der IP-Adresse des Website-Besuchers auf. Um die normale IP-Adressprotokollierung an Apache2 wiederherzustellen, steht ein Modul zur Verfügung, um dieses Verhalten zu korrigieren.

Führen Sie die folgenden Schritte auf jedem Webserver aus, auf dem eine Apache2-Instanz installiert ist.

sudo apt install -y libapache2-mod-rpaf

Um sicherzustellen, dass Apache2 jetzt die richtigen IP-Adressen aufzeichnet, nehmen Sie eine kleine Änderung an der Datei rpaf.conf vor. Ubuntu 18.04 hat die Datei bereits für uns erstellt, wir müssen sie nur bearbeiten und die hervorgehobene IP-Adresse in die des NGINX-Reverse-Proxy-Hosts ändern.

nano /etc/apache2/mods-available/rpaf.conf
<ifmodule rpaf_module="">
    RPAFenable On

    # When enabled, take the incoming X-Host header and
    # update the virtualhost settings accordingly:
    RPAFsethostname On

    # Define which IP's are your frontend proxies that sends
    # the correct X-Forwarded-For headers:
    RPAFproxy_ips 127.0.0.1 ::1

    # Change the header name to parse from the default
    # X-Forwarded-For to something of your choice:
#   RPAFheader X-Real-IP
</ifmodule>

Schlussnotizen

NGINX und Apache2 auf demselben Host

Innerhalb eines Servers oder einer virtuellen Maschine können keine zwei Dienste denselben Port überwachen. Wenn NGINX auf demselben Server oder derselben virtuellen Maschine wie ein Apache2-Webserver installiert ist, müssen Sie den Port ändern, auf dem Apache2 lauscht. NGINX benötigt die Ports 80 und 443, um seine HTTP(S)-Funktionen auszuführen, da dies die Standardports für HTTP und HTTPS sind.

Sehen Sie sich den HTTP-Abschnitt dieses Handbuchs an und fügen Sie Reverse-Proxy-Konfigurationen für Websites hinzu, die von dieser Apache2-Instanz auf die gleiche Weise wie die anderer Server im Netzwerk bedient werden.

Apache2-Listen-Port ändern

Wenn Sie ein Serververwaltungssystem wie ISPConfig installiert haben, verarbeitet dieses System die Apache2-vhost-Dateien, daher sollten Sie nachforschen, wie Sie die Ports ändern können, auf denen Apache2 lauscht. Durchsuchen Sie die ISPConfig-Foren und nehmen Sie dann diese Anpassungen nach Bedarf vor. Andernfalls sollten Sie in den Ubuntu-Foren oder auf der Apache2-Website nachsehen, wie Sie diese Änderungen vornehmen können.

Note: Apache2 ports do not need to be altered when it is the only web server installed on server or virtual machine.

Linux
  1. Einrichten des Nginx Reverse Proxy-Servers unter Debian Linux

  2. Reverse Proxy mit Nginx:Eine Schritt-für-Schritt-Anleitung zur Einrichtung

  3. So richten Sie Nginx als Reverse Proxy unter Ubuntu 20.04 ein

  4. Nginx als Reverse Proxy auf Ubuntu 20.04 einrichten – Schritt-für-Schritt-Anleitung?

  5. Konfigurieren Sie Apache für WebSockets mit Reverse Proxy

Generieren und Verwenden eines SSH-Schlüssels mit PuTTY

So installieren Sie Nginx, MySQL und PHP (LEMP) auf einem Ubuntu 15.04-Server

So richten Sie Nginx als Reverse Proxy für Apache auf Ubuntu 18.04 VPS ein

So erstellen Sie einen HTTP-Proxy mit Squid unter CentOS 8

So installieren Sie NGINX als Reverse Proxy für Apache unter Ubuntu 18.04

So richten Sie Nginx als Loadbalancer für Apache oder Tomcat für HTTP/HTTPS ein