Flask API & nginx 并排

Flask API & nginx alongside each other

我有一个正在尝试设置的服务器。我有一个 Flask 服务器需要在 api.domain.com 上 运行,而我有其他子域指向服务器。我有一个问题。 2/3 子域使用 nginx 没有问题。同时,我的脚本试图绑定到同一台机器上的端口 80,因此失败了。有没有一种方法可以将我的 Flask REST 脚本仅绑定到子域 'api' 的端口 80? 我当前的配置是:

server {
        server_name api.domain.me;
        location / {
            error_page 404 /404.html;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_max_temp_file_size 0;
            proxy_pass http://127.0.0.1:5050/;
            proxy_cache off;
            proxy_read_timeout 240s;
    }
}

不过有个小问题,nginx喜欢把所有的POST请求都变成GET请求,有什么想法吗? 谢谢!

无法在端口 80 上同时绑定两个不同的应用程序。

我会这样设置你的 api:

将您的 Flask API 绑定到端口 8080。 在 NGINX 上,您可以将子域配置为指向您的 Flask 应用程序

upstream flask_app {
  server 127.0.0.1:8080;
}


sever {
  listen 80;
  server_name api.domain.com;

  location / {
    proxy_pass http://flask_app/;
    proxy_set_header Host $host;
  }
}

经过一番诊断,我实际上发现了。

server {
    if ($host = api.domain.me) {
        return 301 https://$host
    }
    # managed by Certbot

必须变成:

server {
    if ($host = api.domain.me) {
        return 497 '{"code":"497", "text": "The client has made a HTTP request to a port listening for HTTPS requests"}';
    }

因为 Certbot 尝试将请求升级到 https,但 HTTP 方法由于 301 响应代码而更改为 GET。