
Ich möchte, dass meine Flask-App irgendwann eine API wird und von einem Windows-Server ausgeführt wird. Ich besitze eine Domäne auf Google Domains und habe einen DNS von api.(mydomain) hinzugefügt, wobei ich die IP-Adresse des Computers verwende, von dem aus sie als Server ausgeführt wird. Ich wollte, dass die API SSL und HTTPS ist und habe Waitress -> Nginx -> Win-Acme verwendet.
Hier ist mein Verzeichnis: C:\Users\Wreck\Documents\Flask\acme-challenge. In diesem Ordner habe ich eine Datei test.txt mit reinem Text erstellt.
Im Flask-Ordner habe ich eine Flask-App, die im Moment nur „Hallo Welt“ ausgibt.
Mein erster Schritt ist, als Kellnerin anzufangen:
(venv) C:\Users\Wreck\Documents\Flask>waitress-serve --listen=*:5000 flaskappv1:app
INFO:waitress:Serving on http://[::]:5000
INFO:waitress:Serving on http://0.0.0.0:5000
„Hallo Welt!“ wird auf dem lokalen Host angezeigt.
Dann habe ich nginx eingerichtet. Nach stundenlangem Testen bin ich immer noch ratlos, warum die Rückgabe der Textdatei von acme-challenge immer noch einen Fehler erzeugt. Hier ist mein Code:
error_log logs/error.log;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
server {
listen 80;
server_name api.rootmusic.app;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ^~ /.well-known/acme-challenge/ {
root C:/Users/Wreck/Documents/Flask/acme-challenge/;
allow all;
default_type "text/plain";
try_files $uri =404;
}
}
}
Und hier sind meine Ausgaben:
C:\WINDOWS\system32>curl http://api.rootmusic.app/.well-known/acme-challenge/test.txt
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
C:\WINDOWS\system32>curl http://api.rootmusic.app/
Hello World!
Ich habe Windows Defender ausgeschaltet. Ich habe die IP-Ports 80 und 5000 meines Servercomputers weitergeleitet. Ich habe außerdem eingehende Berechtigungen für die Windows-Firewall für Port 80 und 5000 festgelegt.
Ich denke, es könnte etwas mit meinen Lese- und Anzeigeberechtigungen zu tun haben, aber im Task-Manager wird Nginx über Wreck ausgeführt, also über mich und ich bin mir ziemlich sicher, dass ich ein Administratorbenutzer bin. Außerdem habe ich die Lese- und Schreibberechtigungen für die gesamte Dateistruktur überprüft.
Falls das hilft, ist dies der Fehler, den ich erhalte, wenn ich versuche, mit Win-Acme HTTPS für die API (Domäne) zu erhalten.
Plugin Manual generated source api.rootmusic.app with 1 identifiers
Plugin Single created 1 order
Cached order has status invalid, discarding
[api.rootmusic.app] Authorizing...
[api.rootmusic.app] Authorizing using http-01 validation (SelfHosting)
[api.rootmusic.app] Authorization result: invalid
[api.rootmusic.app] {"type":"urn:ietf:params:acme:error:unauthorized","detail":"(my ip): Invalid response from http://api.rootmusic.app/.well-known/acme-challenge/uQdTJeSYMKLUy9_7dIgEzLZQUay11eYUxvKNcxNPPv4: 404","status":403,"instance":null}
[api.rootmusic.app] Deactivating pending authorization
Wie Sie vielleicht schon vermutet haben, bin ich ein ziemlicher Neuling in der Systemadministration. Aber danke, dass Sie bis hierhin gelesen haben. Wenn Sie Vorschläge zum Wechseln von Programmen oder eine Möglichkeit haben, dies einfacher zu machen, lassen Sie es mich wissen, denn ich bin völlig aufgeschmissen. Ich habe mit IIC angefangen, bin aber zu nginx gewechselt, weil ich es nicht herausfinden konnte.
Aber ja, warum kann Nginx keine Dateien am Standort Acme-Challenge lesen? Ich nehme an, das ist es, was auch Win-Acme stoppt.