Ich versuche, eine App über den Nginx-Reverse-Proxy im Internet bereitzustellen. Meine App ist vollständig containerisiert und meine nginx-Konfigurationsdatei in /etc/nginx/sites-available entspricht dem Shinyproxy-Beispiel hier: https://www.shinyproxy.io/security/
Server {
hören 80;
Servername Shinyproxy.IhreDomain.com;
^(.*) https://$server_name$1 permanent umschreiben;
}
Server {
höre 443;
Servername Shinyproxy.IhreDomain.com;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log Fehler;
ssl an;
SSL-Protokolle TLSv1 TLSv1.1 TLSv1.2;
ssl_zertifikat /etc/ssl/certs/ihredomain.com.crt;
ssl_certificate_key /etc/ssl/private/yourdomain.com.key;
Lage / {
proxy_pass http://127.0.0.1 :8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_host;
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;
}
}
Meine Domain hat eine https-Zertifizierung und wenn ich meine Domain besuche, sehe ich "Willkommen bei nginx!" Bildschirm. Nachdem ich jedoch meine App gestartet habe, um Port 8080 mit dem Befehl abzuhören:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
Wenn ich meine Domain besuche, sehe ich immer noch "Welcome to nginx!" Bildschirm. Nginx leitet meine Domain nicht an meine glänzende Anwendung weiter. Irgendwelche Ideen, warum die Proxy-Umkehrung nicht funktioniert? Habe ich meine containerisierte Shiny-App am falschen Port gestartet?
Ihre Anweisung proxy_pass der Reverse-Engine leitet das lokale Netzwerk des Hostcomputers (127.0.0.1) weiter. Wenn Sie Ihre Anwendungen containerisieren, wechseln Sie vom Localhost-Netzwerk zum Docker-Ökosystem-Netzwerk. Daher ist es wichtig, wie Sie Ihren Shinyproxy zum Hosten starten und veröffentlichen. Lesen Sie diesen Artikel über die Vernetzung in Docker
Danke für die Hilfe. Ich habe immer noch keine Lösung gefunden, nachdem ich den Artikel gelesen und weitere Fehlerbehebungen durchgeführt habe. Muss ich den Teil 127.0.0.1 des Proxy-Passes ändern? Oder muss ich meinen Docker-Container hochfahren, um irgendwo anders als 8080:8080 zu hören?
Wie startest du deinen Shinyproxy?
Hallo @lucius-verus-fan
Nur um sicher zu gehen, mit dem folgenden Befehl versuchen Sie, ShinyProxy zu starten, oder?
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
Das wind_container
ist also ein Kundencontainer, den Sie erstellt haben, der ShinyProxy enthält?
In diesem Fall glaube ich nicht, dass das Problem mit dem Docker-Netzwerk zu tun hat, der Teil -p 8080:8080
des Befehls sorgt dafür, dass Port 8080 an Ihren lokalen Computer weitergeleitet wird, unabhängig davon, in welchem Docker-Netzwerk der Container läuft.
Stattdessen glaube ich, dass der Fehler in Ihrer nginx-Konfiguration liegt. Sie müssen diese Zeilen an Ihr Setup anpassen:
server_name shinyproxy.yourdomain.com;
rewrite ^(.*) https://$server_name$1 permanent;
# a few lines lower
server_name shinyproxy.yourdomain.com;
Dort müssen Sie den korrekten Domänennamen Ihres Servers angeben. Jetzt weisen Sie nginx an, jede Anfrage auf shinyproxy.yourdomain.com
als Anfrage an ShinyProxy zu bearbeiten, jede andere Anfrage führt zu einem 404. Da Sie also nicht über shinyproxy.yourdomain.com
zugreifen, wird nginx geben du ein 404.
Hallo @LEDfan und @jaysnm
Der Befehl, den ich zum Starten von ShinyProxy verwende, lautet:
docker run -d -v /var/run/docker.sock:/var/run/docker.sock --net wind_net -p 8080:8080 wind_container
Die nginx-Konfiguration, die ich in meinem ersten Kommentar angehängt habe, ist nicht die nginx-Konfiguration, die ich verwende, das ist das Beispiel auf der Shinyproxy-Website. Ich werde die nginx-Konfigurationsdatei anhängen, die ich unten verwende.
server {
listen 80;
server_name windts.app www.windts.app;
rewrite ^(.*) https://$server_name$1 permanent;
}
server {
listen 443 ssl;
server_name windts.app www.windts.app;
access_log /var/log/nginx/shinyproxy.access.log;
error_log /var/log/nginx/shinyproxy.error.log error;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/ssl/certs/windts.app.crt;
ssl_certificate_key /etc/ssl/private/windts.app.key;
location / {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 600s;
proxy_redirect off;
proxy_set_header Host $http_host;
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;
}
}
Beim Besuch der Domain windts.app oder www.windts.app werden Sie zur Nginx-Willkommensseite weitergeleitet, anstatt zur Shinyproxy-App weitergeleitet zu werden. Die App läuft sowohl lokal als auch auf einem Remote-Server ordnungsgemäß. Sie müssen lediglich die Domain mit dem Container verbinden, auf dem die Shinyproxy-App ausgeführt wird.
Ich habe das Problem gelöst. Nginx zeigte die Shinyproxy-App nicht an, weil ich es versäumt hatte, meine Nginx-Konfigurationsdatei in /etc/nginx/sites-available/ mit /etc/nginx/sites-enabled zu verknüpfen. Nachdem ich meine Konfiguration in beiden Verzeichnissen mit dem Befehl ls -s
verknüpft und die Standardkonfigurationsdatei aus /etc/nginx/sites-enabled entfernt hatte, wurde die Shinyproxy-App in meiner Domain angezeigt.
Für das Protokoll ist es ln -s
[sic], aber danke für das Teilen des Feedbacks und gut, dass Ihr Problem gelöst ist!
Hilfreichster Kommentar
Ich habe das Problem gelöst. Nginx zeigte die Shinyproxy-App nicht an, weil ich es versäumt hatte, meine Nginx-Konfigurationsdatei in /etc/nginx/sites-available/ mit /etc/nginx/sites-enabled zu verknüpfen. Nachdem ich meine Konfiguration in beiden Verzeichnissen mit dem Befehl
ls -s
verknüpft und die Standardkonfigurationsdatei aus /etc/nginx/sites-enabled entfernt hatte, wurde die Shinyproxy-App in meiner Domain angezeigt.