
Ich habe also zu Hause ein Synology NAS mit einigen laufenden Diensten, die ich über das WWW erreichen muss, aber ich möchte verständlicherweise keine Ports auf meiner Heim-IP für das weite Internet öffnen (insbesondere, weil externe Dienste auf Port 443 auf meinen Server zugreifen müssen) – also habe ich beschlossen, eine Always Free-Instanz (0,48 Gbit/s-Konnektivität, 1 CPU, 1 GB RAM) auf Oracle Cloud mit installiertem Ubuntu 22.04 zu starten und nginx darauf zu installieren, um von außerhalb meines Heimnetzwerks auf diese Dienste zugreifen zu können. Dann habe ich den Port auf meinem Router nur für die IP-Adresse der Cloud-Instanz geöffnet.
Ich habe zwar Erfahrung mit der Verwaltung von Linux-Servern über SSH, aber dies ist mein erstes Mal, dass ich mit Nginx im Allgemeinen herumprobiere, ganz zu schweigen von Reverse-Proxys.
Während des Tests habe ich den Port für alle IPs offen gelassen, damit ich den eingehenden Datenverkehr in meinem Labor sowohl direkt als auch über einen Reverse-Proxy testen kann. Hier fange ich an, Probleme zu haben:
- wenn ich direkt auf phpMyAdmin zugreife, das auf dem Upstream-Server läuft (ich frage einfachhttps://pma.upstream.mydomain.xyz:geöffneterPortin meinem Browser), es wird sofort geladen - sogar mit geleertem Cache
- wenn ich über den Reverse-Proxy auf phpMyAdmin zugreife, das auf dem Upstream-Server läuft (durch Abfragehttps://pma.reverseproxy.mydomain.xyz:443in meinem Browser), dauert das Laden nach dem Leeren des Browser-Cache über eine Minute. Wenn der Cache bereits geladen ist, ist es nicht so langsam (vielleicht 10 Sekunden), aber immer noch viel langsamer als die direkte Abfrage des Upstream-Servers (was nicht möglich sein wird, wenn ich den Port zum breiteren Internet schließe). Nachdem ich die Browserkonsole überprüft habe, dauert es bei winzigen PNGs, die phpMyAdmin als Symbole verwendet (jedes Bild ist maximal ein paar hundert Byte groß), und größeren CSS/JS-Dateien (ein paar 10 KB) am längsten.
Wenn ich über einen Reverse-Proxy auf eine andere Site auf dem Upstream-Server zugreife, habe ich diese Probleme anscheinend nicht, obwohl es stimmt, dass dort nicht so viele kleine JS- und PNG-Dateien bereitgestellt werden, sondern hauptsächlich nur Text.
Unten ist meine Nginx-Serverblockkonfiguration. Hat jemand eine Ahnung, was ich falsch gemacht haben könnte? Ich wäre für jeden Rat sehr dankbar.
server {
listen 443 ssl http2;
server_name pma.reverseproxy.mydomain.xyz;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
ssl_certificate /etc/letsencrypt/live/reverseproxy.mydomain.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/reverseproxy.mydomain.xyz/privkey.pem;
resolver 1.1.1.1 8.8.8.8 valid=300s;
set $backend_server https://pma.upstream.mydomain.xyz:openedPort;
location / {
proxy_pass $backend_server;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host pma.upstream.mydomain.xyz;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_buffer_size 128k;
proxy_buffers 8 256k;
proxy_busy_buffers_size 256k;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
proxy_read_timeout 20s;
}
}