我一直在与此作斗争,无法理解它。
我有一个简单的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的新手。
答案 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/