Nginx 运行 docker 上的 404 (uwsgi)
404 on Nginx running on docker (uwsgi)
我一直在与此作斗争,无法解决它。
我有一个简单的 Dockerfile 可以工作,我使用 supervisord 作为 CMD 来启动 nginx 和 uwsgi。它完成了工作,但我返回了 404。所以我所做的是 用 /bin/bash
启动 docker 并手动启动并调试 ,例如:
sudo docker run -t -i -p 8095:80 myimage /bin/bash
这是我的 nginx conf(在可用站点中,然后在启用站点中 link):
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 主页 find 但任何其他路由 returns 404. Nginx 错误日志为空.
我已经确认 nginx 读取 .conf(通过添加拼写错误并查看 nginx 日志中的错误)但是更改套接字位置没有影响好像它甚至不关心那个部分。 在我的 ubuntu 框的类似情况下,当 sock 文件不存在或存在权限问题时,我得到 502 并且日志中有一些提示。 但在这里我什么也没得到,好像 UWSGI 没有针对 NGINX 配置。
我迷路了,你能帮忙吗?我是否缺少 nginx 中的模块配置(类似于 apache)?我是 nginx 的新手。
404 可能是因为您的 nginx conf
文件的 server
块不正确,我认为是因为您的 server_name
部分。
这是我修改后的版本,你可以检查它是否有效
server {
listen 80 default_server;
location / {
uwsgi_pass unix:///WikiRockWord2Vec/WikiRockWord2Vec.sock;
include uwsgi_params;
}
}
配置 Nginx、uWSGI、Supervisord 等(仅针对 Flask 应用程序)可能很困难,因此我制作了一个 public(开源)Docker 图片和可以用来构建 Python Flask 网络应用程序的口哨声。
它为 运行 应用程序提供了 uWSGI,为 HTTP 提供服务的 Nginx 和用于控制它们的 Supervisord,因此您无需学习如何安装和配置所有这些来构建您的 Python Flask 网络应用程序。
似乎带有 Nginx 的 uWSGI 是部署 Python 网络应用程序的更健壮(并且具有出色性能)的方法之一。以下是基准:http://nichol.as/benchmark-of-python-web-servers.
您甚至可以使用一些模板项目来 bootstrap 您自己的项目。而且,您不必克隆整个项目或其他东西,您可以将它用作基础图像。
Docker 集线器:https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/
GitHub: https://github.com/tiangolo/uwsgi-nginx-flask-docker
我一直在与此作斗争,无法解决它。
我有一个简单的 Dockerfile 可以工作,我使用 supervisord 作为 CMD 来启动 nginx 和 uwsgi。它完成了工作,但我返回了 404。所以我所做的是 用 /bin/bash
启动 docker 并手动启动并调试 ,例如:
sudo docker run -t -i -p 8095:80 myimage /bin/bash
这是我的 nginx conf(在可用站点中,然后在启用站点中 link):
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 主页 find 但任何其他路由 returns 404. Nginx 错误日志为空.
我已经确认 nginx 读取 .conf(通过添加拼写错误并查看 nginx 日志中的错误)但是更改套接字位置没有影响好像它甚至不关心那个部分。 在我的 ubuntu 框的类似情况下,当 sock 文件不存在或存在权限问题时,我得到 502 并且日志中有一些提示。 但在这里我什么也没得到,好像 UWSGI 没有针对 NGINX 配置。
我迷路了,你能帮忙吗?我是否缺少 nginx 中的模块配置(类似于 apache)?我是 nginx 的新手。
404 可能是因为您的 nginx conf
文件的 server
块不正确,我认为是因为您的 server_name
部分。
这是我修改后的版本,你可以检查它是否有效
server {
listen 80 default_server;
location / {
uwsgi_pass unix:///WikiRockWord2Vec/WikiRockWord2Vec.sock;
include uwsgi_params;
}
}
配置 Nginx、uWSGI、Supervisord 等(仅针对 Flask 应用程序)可能很困难,因此我制作了一个 public(开源)Docker 图片和可以用来构建 Python Flask 网络应用程序的口哨声。
它为 运行 应用程序提供了 uWSGI,为 HTTP 提供服务的 Nginx 和用于控制它们的 Supervisord,因此您无需学习如何安装和配置所有这些来构建您的 Python Flask 网络应用程序。
似乎带有 Nginx 的 uWSGI 是部署 Python 网络应用程序的更健壮(并且具有出色性能)的方法之一。以下是基准:http://nichol.as/benchmark-of-python-web-servers.
您甚至可以使用一些模板项目来 bootstrap 您自己的项目。而且,您不必克隆整个项目或其他东西,您可以将它用作基础图像。
Docker 集线器:https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/
GitHub: https://github.com/tiangolo/uwsgi-nginx-flask-docker