python - 读取上游时 nginx 权限被拒绝 - 即使以 root 身份运行

标签 python nginx flask uwsgi

我有一个 flask 应用程序在 nginx 后面的 uWSGI 下运行。

*1 readv() failed (13: Permission denied) while reading upstream, client: 10.0.3.1, server: , request: "GET /some/path/constants.js HTTP/1.1", upstream: "uwsgi://unix:/var/uwsgi.sock:", host: "dev.myhost.com"

socket 的权限没问题(666,并且设置为与 nginx 相同的用户),事实上,即使我以 root 身份运行 nginx,我仍然会得到这个错误。

flask app/uwsgi 正在正确发送请求。但它只是不被 Nginx 读取。这是在 Ubuntu Utopic Unicorn 上。

如果 nginx 进程对套接字具有完全访问权限,您是否知道哪里权限可能会被拒绝?

作为一个复杂因素,该服务器在安装了 Ubuntu 14.04 的容器中运行。这个设置曾经有效......但我最近将主机升级到 14.10......我完全理解这可能是问题的原因。但在降级主机或升级容器之前,我想了解原因。

当我在生成此错误的工作人员上运行 strace 时,我看到它发出的调用是这样的:

readv(14, 0x7fffb3d16a80, 1)            = -1 EACCES (Permission denied)

14 好像是这个系统调用创建的文件描述符

socket(PF_LOCAL, SOCK_STREAM, 0)        = 14

所以它不能从它刚刚创建的本地套接字中读取?

最佳答案

好的!所以我认为问题与 this bug 有关.似乎即使没有将 apparmor 配置为阻止访问容器内的套接字,它实际上也在做一些事情来阻止读取它们(尽管不是创建......)所以关闭容器的 apparmor(following these instructions)起作用修理它。

两个相关的行是:

sudo apparmor_parser -R /etc/apparmor.d/usr.bin.lxc-start

sudo ln -s/etc/apparmor.d/usr.bin.lxc-start/etc/apparmor.d/disabled/

并添加

lxc.aa_profile = unconfined 

到容器配置文件。

注意:这些错误没有记录在任何 apparmor 日志中。

关于python - 读取上游时 nginx 权限被拒绝 - 即使以 root 身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27969166/

相关文章:

python - 属性错误: 'tuple' object has no attribute 'strip' : Flask Markdown?

python - 什么是可变阴影?

python - 通过添加重复的数字来更改序列的名称

ruby-on-rails - 我应该为我的 Rails 应用程序使用 Apache 还是 Nginx &Passenger 或 Mongrel

ssl - 使用 SSL 和 NGINX 作为反向代理配置 Sonarqube - 错误代码 : SSL_ERROR_RX_RECORD_TOO_LONG

django - 使用 Django 和 nginx 通过个人 SSL 证书登录

python - 如何修改我在 python 中随机选择的 url

python - 如何将列表与数据框列标题进行比较并替换标题名称?

python - 如何使用lxml在特定位置插入文本节点?

python - 使用 flask reSTLess 的多对多关系,发布一对多数据