在Docker上运行的Nginx上的404(uwsgi)

时间:2015-07-17 08:29:08

标签: nginx flask docker uwsgi

我一直在与此作斗争,无法理解它。

我有一个简单的Dockerfile可以工作,我使用 supervisord 作为CMD来启动nginx和uwsgi。它完成了这项工作,但我回到了404.所以我所做的就是/bin/bash启动docker并手动启动并调试,例如:

sudo docker run -t -i -p 8095:80  myimage /bin/bash

所以这是我的nginx conf(在网站可用,然后是网站启用的链接):

server {
    listen 80;
    server_name 0.0.0.0;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/WikiRockWord2Vec/WikiRockWord2Vec.sock;
    }
}

这是我的uwsgi ini:

[uwsgi]
module = wsgi

master = true
processes = 5


socket = /WikiRockWord2Vec/WikiRockWord2Vec.sock
chmod-socket = 777
vacuum = true
uid = www-data

die-on-term = true

套接字确实已创建,我已将权限更改为777以确保所有nginx都可以访问。但似乎nginx无论如何也不会向上游发送。

浏览到localhost:8095使nginx主页找到,但任何其他路由返回404. Nginx错误日志为空

我已经确认nginx 读取.conf (通过添加拼写错误并查看nginx日志中的错误)但更改套接字位置没有任何影响,就好像它甚至不关心关于该部分。 在我的ubuntu框中,当sock文件不存在或存在权限问题时类似的情况下,我会在日志中得到502和一些提示。 但是在这里,我什么都没得到,好像UWSGI没有配置对抗NGINX。

我迷了,你能帮忙吗?我是否缺少nginx中的模块配置(类似于apache)?我是nginx的新手。

2 个答案:

答案 0 :(得分:2)

404可能是因为您的nginx conf文件的server阻止了错误,我认为是因为您的server_name部分。

所以这是我的修改版本,您可以检查它是否正常工作

server {
    listen 80 default_server;

    location / {
        uwsgi_pass unix:///WikiRockWord2Vec/WikiRockWord2Vec.sock;
        include uwsgi_params;
    }
}

答案 1 :(得分:0)

配置Nginx,uWSGI,Supervisord等(并且仅适用于Flask应用程序)可能很困难,因此我制作了一个公共(和开源)Docker镜像,其中包含可用于构建Python的所有花哨功能Flask Web应用程序。

它有uWSGI用于运行应用程序,Nginx用于提供HTTP和Supervisord来控制它们,因此您不必学习如何安装和配置所有这些来构建Python Flask Web应用程序。

使用Nginx的uWSGI似乎是部署Python Web应用程序的更强大(并且性能更好)的方法之一。以下是基准:http://nichol.as/benchmark-of-python-web-servers

甚至还有一些模板项目可用于引导您自己的项目。此外,您不必克隆整个项目或其他东西,您只需将其用作基本图像。

Docker Hub:https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/

GitHub:https://github.com/tiangolo/uwsgi-nginx-flask-docker