【问题标题】:uWSGI, nginx, django unix sockets not workinguWSGI、nginx、django unix 套接字不工作
【发布时间】:2016-01-29 01:16:39
【问题描述】:

我有一个 django 应用程序。我似乎无法让 nginx 正确地提供静态文件,但这不是这个问题。

当前的问题是,当遵循本指南时:https://gist.github.com/evildmp/3094281

我尝试使用 unix 套接字而不是 Web 套接字。

例如

server unix:///tmp/uwsgi.sock;    # for a file socket
#server 127.0.0.1:8001;      # for a web port socket

使用 /tmp/uwsgi.sock 套接字而不是 127.0.0.1:8001 网络端口套接字。

问题是当我使用 web 端口套接字时,我导航到 domainname.com:8001 我到达了由 uWSGI 服务的网站,但没有加载静态文件。所以这意味着至少 uwsgi 正在工作。但是当我切换到文件套接字时,我什至无法让它工作。

我做错了什么?

这是我的 nginx.conf:

# nginx.conf
upstream django {
    # connect to this socket
    # server unix:///tmp/uwsgi.sock;    # for a file socket (TRYING TO USE)
    server 127.0.0.1:8001;      # for a web port socket (RATHER THAN THIS)
    }

server {
    # the port your site will be served on
    listen      8000;
    # the domain name it will serve for
    server_name .cshenkan.com;   # substitute your machine's IP address or FQDN
    charset     utf-8;

    #Max upload size
    client_max_body_size 75M;   # adjust to taste

    # Django media
    location /media  {
            alias /home/ubuntu/sasite-rewrite/media;      # your Django pro$
    }

    location /static {
            alias /home/ubuntu/sasite-rewrite/static;     # your Django pro$
    }
    location /assets  {
            alias /home/ubuntu/sasite-rewrite/assets
    } 

    # Finally, send all non-media requests to the Django server.
    location / {
        uwsgi_pass  django;
        include     /etc/nginx/uwsgi_params; # or the uwsgi_params you installe$
        }
    }

还有我的base.py设置文件sn-p:

STATIC_ROOT = normpath(join(SITE_ROOT, 'static'))
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    normpath(join(SITE_ROOT, 'static')),
    normpath(join(SITE_ROOT, 'assets')),
)

以及我在使用网络套接字时如何运行 uwsgi:

uwsgi --http :8001 --chdir /home/ubuntu/sasite-rewrite --wsgi-file /home/ubuntu/sasite-rewrite/sasite/wsgi.py

以及我在使用 unix 套接字时如何运行它:

uwsgi --socket /tmp/uwsgi.sock --chdir /home/ubutnu/sasite-rewrite --wsgi-file /home/ubuntu/sasite-rewrite/sasite/wsgi.py

在使用 unix 套接字时,我似乎无法让它工作。

我也不能让 nginx 提供正确的静态文件,例如,如果我将一个文件添加到名为 1.png 或 1.txt 的媒体目录并尝试使用 domainname.com:8000/media/1 访问它们。 png 我总是收到挂起或服务器错误没有响应。

我做错了什么?

如何让 unix 套接字正常工作?我使用的命令是否正确?

我也不明白这一点,当我使用网络套接字时,我可以连接到 domainname.com:8001 并获取没有静态文件的页面,它看起来像垃圾但是从 uwsgi 加载。但是对于 unix 套接字,我不知道如何访问 uwsgi 提供的页面以查看它是否适用于 unix 套接字。在我开始让 nginx 工作之前,我需要解决这个问题,因为我尝试在 nginx 上使用 web 套接字,但仍然没有运气,我希望一旦我的 unix 套接字设置正确,nginx 会更好地工作。

您可以提供任何建议或示例吗?将不胜感激,我是一名长期的 django 程序员,但我自己很少部署这些站点。所以我在这里真的很挣扎。

非常感谢任何帮助,谢谢。

【问题讨论】:

  • nginxerror.log 说什么? “不工作”是什么意思? nginx 给你什么状态码?
  • 我只是无法从 nginx.conf 中指定的端口访问该网站。因此,要让静态文件与站点一起工作,我需要让 nginx 为静态文件提供服务,并让 uWSGI 与 Django 通信以服务其余部分。 UWSGI 单独完成,没有静态文件。但是 nginx 似乎并没有在 sll 工作。早上进办公室我会贴出nginx访问日志。
  • 你应该得到 something (就像一个通用的 nginx 错误页面)。如果没有,那么您应该先尝试让 nginx 运行,然后再对其进行任何其他操作。成功后,发布error.log 的最后几行。
  • 当我进入办公室时会这样做,不,我没有看到标准的 nginx 错误页面。我似乎无法让 uWSGI 和 nginx 合作。
  • 如果你不能加载任何东西,那么 nginx 可能甚至没有运行。

标签: python django sockets nginx uwsgi


【解决方案1】:

今天我在使用 NGINX + Socket Unix for uwsgi 协议时遇到了同样的问题。 我发现 NGINX 的 1.8 版本存在漏洞。

尝试安装可通过 UNIX SOCKET 工作的 1.10 版。

如果你使用 open-SuSE,你可以在这里获取 rpm:

http://download.opensuse.org/repositories/home:/ghostlyrat/openSUSE_Leap_42.2/x86_64/nginx-1.10.1-3.3.x86_64.rpm

或者,直接在nginx官方下载区:

http://nginx.org/en/download.html

【讨论】:

  • 我发现在 NGINX 1.11 版本中问题再次出现
  • 你知道问题是否在 Nginx 版本:1.18.0 上仍然存在吗?
  • @juanbits 我不知道。在这个错误之后,我们不再尝试使用 Socket 选项
  • 我的解决方案是使用 proxy_pass 到 http 套接字
猜你喜欢
  • 1970-01-01
  • 2017-08-07
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2016-05-25
  • 2016-02-06
  • 2019-03-03
  • 2014-05-31
相关资源
最近更新 更多