我希望我的 flask 应用程序最终成为一个 api,并在 Windows 服务器上运行它。我在 google domains 上拥有一个域名,我添加了 api.(mydomain) 的 DNS,使用它将作为服务器运行的计算机的 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 Defender。我已从服务器计算机的 IP 端口 80 和 5000 进行端口转发。我还为端口 80 和 5000 设置了 Windows 防火墙的入站权限。
我认为这可能是我的读取和查看权限的问题,但在任务管理器中,nginx 从 Wreck 运行,我确信我是管理员用户,并且我检查了整个文件结构的读写权限。
如果这有帮助,这是我尝试使用 win-acme 获取 api 的 HTTPS 时收到的错误。(域)
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 的原因。