
Я хотел бы, чтобы мое приложение Flask в конечном итоге стало API и запускалось с сервера Windows. У меня есть домен на доменах Google, я добавил DNS api.(mydomain), используя IP-адрес компьютера, на котором оно будет работать как сервер. Я хотел, чтобы API было ssl и https, и использовал waitress -> nginx -> win-acme
Вот мой каталог: C:\Users\Wreck\Documents\Flask\acme-challenge. Внутри этой папки я создал файл test.txt, содержащий только чистый текст.
В папке Flask у меня есть приложение Flask, которое на данный момент просто выводит «Hello World».
Мой первый шаг — стать официанткой:
(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
Привет, мир! отображается на локальном хосте.
Затем я настроил nginx, после нескольких часов тестирования я все еще полностью застрял, почему возврат текстового файла из acme-challenge все еще приводит к ошибке. Вот мой код:
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;
}
}
}
И вот мои результаты:
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!
Я отключил защитник Windows. Я перенаправил порты с IP-порта моего сервера на порты 80 и 5000. Я также установил входящие разрешения для брандмауэра Windows на порты 80 и 5000.
Думаю, это связано с моими правами на чтение и просмотр, но в диспетчере задач nginx запускается от Wreck, которым являюсь я, и я почти уверен, что являюсь администратором, и я проверил права на чтение и запись для всей структуры файлов.
Если это поможет, вот ошибка, которую я получаю, когда пытаюсь использовать win-acme для получения HTTPS для API.(домен)
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
Как вы могли догадаться, я довольно новичок в системном администрировании. Но спасибо, что дочитали до этого места. Если у вас есть предложения по смене программ или какой-либо способ сделать это проще, дайте мне знать, потому что я полностью застрял. Я начал с IIC, но перешел на nginx, потому что не смог в нем разобраться.
Но да, почему nginx не может читать файлы в расположении acme-challenge? Я предполагаю, что это то, что также останавливает win-acme.