繁体   English   中英

Docker Flask app behind nginx 反向代理发送404

[英]Docker Flask app behind nginx reverse-proxy sending 404

Tl;博士:
我在 docker 容器中有一个正在运行的 Flask 应用程序。 当我在主机上设置 nginx 反向代理以避免必须在 URL 中输入端口号时,每次我在定义的 nginx 位置访问主页时,应用程序都会发送 404。 为什么?

语境

我有一个原型Flask应用程序运行如下:

flask run --host 0.0.0.0 --port 5000

它是dockerized并在compose文件中暴露在端口 8080 上:

ports:
  - "8080:5000"

一切正常,当我访问主页http://my-server.org:8080时,服务器高兴地说:

web_1  | in route /
web_1  | 166.24.119.203 - - [24/Sep/2041 10:29:20] "GET / HTTP/1.1" 200 -
web_1  | 166.24.119.203 - - [24/Sep/2041 10:29:21] "GET /static/css/style.css HTTP/1.1" 200 -
web_1  | 166.24.119.203 - - [24/Sep/2041 10:29:21] "GET /static/favicon.ico HTTP/1.1" 200 -

现在,为了避免必须在 URL 中输入端口,我在主机上的/etc/nginx/sites-available/中设置了一个简单的 MWE nginx 反向代理配置文件(为简单起见还没有 dockerized)和在sites-enabled/中自动符号链接 该文件包含以下内容:

server {
    listen 80;
    listen [::]:80;

    server_name my-server.org;

    location /my-app {
        proxy_pass http://127.0.0.1:8080;
    }
}

请注意nginx正在正常运行:

# service nginx status
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-01-30 10:48:17 CET; 54min ago
   ...

现在,每次我点击主页http://my-server.org/my-app现在,服务器返回:

web_1  | 172.27.0.1 - - [24/Sep/2041 12:34:26] "GET /my-app HTTP/1.0" 404 -

如果这有帮助,我注意到此处显示的 IP 实际上是服务使用的my-app_default 884065722228588网络Gateway值。

如何让我的 Flask 应用程序在 nginx 反向代理后正常工作?
我希望从答案中得到足够的理解,以便能够在之后使用gunicorn设置相同的东西。

    location /my-app {
        proxy_pass http://127.0.0.1:8080;
    }

/my-app添加到http://127.0.0.1:8080

修复:在端口后添加斜杠/

    location /my-app/ {
        proxy_pass http://127.0.0.1:8080/;
    }

是的,末尾的斜线通常会在 Nginx 中产生很大的不同。

它相当于:

    location /my-app/ {
        rewrite ^/my-app(.*)$ $1 last;
        proxy_pass http://127.0.0.1:8080;
    }

IIRC,但我从不使用它。

顺便说一句:通常你把符号链接放在sites-enabled而不是sites-available中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM